# Load packages -----------------------------------------------------------
library(knitr)
library(kableExtra)
library(skimr)
library(janitor)
library(tidyverse)
library(tidyr)
library(metafor)
library(clubSandwich)
library(fastDummies)
library(ggrepel)
library(ggExtra)
library(ggridges)
library(MetBrewer)
library(GGally)
library(igraph)
library(fastDummies)
library(patchwork)
library(ggh4x)Sensitivity analyses for Group-Based Review
Introduction
This document contains the preliminary data analysis for the meta-analyses with dependent effects (PRIMED) in (Dalgaard et al. 2025). As we conduct separate analyses for reintegration (primary analysis) and mental health (secondary analysis) outcomes, we have divided the tabulation and visualization according to the two types of effect size estimates. In most cases, the main presentation of reintegration outcome data appears in the center column of the document, while the presentation of the mental health outcome data is shown in the right column. Where larger tables or visualizations are required, we have used tabsets to distinguish between reintegration and mental health analyses. To view the mental health presentation, select the ‘Mental health’ tab. To find the mental helath presentation, press on the ‘Mental health’ tab. In a few instances, reintegration and mental health outcomes are tabulated and visualized together to provide an overall view of the relationships between these two types of estimates. All packages that we have used to create this document, can be found in the next section.
R packages
Below, we present the R package we use in this document. For exact R package versions, see the Session Information at the bottom of this document.
Data manipulation - prepare data sets
In the following section, we create all the variables that are used in the main analyses of the review. Unfold the below code to see this exact manipulations.
Loading data
Show the code
# Loading the needed data for analysis
group_based_dat <- readRDS("Group-based interventions data.RDS") |>
# The post-measurement of Empowerment Scale seems flawed for the study by
# Barbic et al. 2009 we therefore we exclude it from the analysis
filter(!(authors == "Barbic et al." & test_name == "The Empowerment Scale")) |>
mutate(
author_year = paste(authors, year),
study = paste(authors, year),
study = stringi::stri_trans_general(study, "Latin-ASCII"),
study = fct_relevel(study, sort)
) |>
# Remove unused outcomes
filter(!str_detect(analysis_plan, "Unused"))Main variable manipulation
Unfold the below code, to find the primary data manipulation for the overall data, including both all reintegrational as well as mental health outcomes.
Show the code
gb_dat <-
group_based_dat |>
# Exclude the two binary outcomes
filter(variable_type != "Binary") |>
mutate(
es_id = 1:n(),
esid = es_id,
# Main covariate adjusted effect cluster adjusted
gt_pop = if_else(!is.na(gt_post), gt_post, NA_real_),
gt_pop = if_else(!is.na(gt_DD), gt_DD, gt_pop),
gt_pop = if_else(!is.na(gt_adj), gt_adj, gt_pop),
gt_pop = if_else(!is.na(gt_reg), gt_reg, gt_pop),
gt_pop = if_else(!is.na(gt_DD_pop), gt_DD_pop, gt_pop),
gt_pop = if_else(!is.na(gt_adj_pop), gt_adj_pop, gt_pop),
vgt_pop = if_else(!is.na(vgt_post), vgt_post, NA_real_),
vgt_pop = if_else(!is.na(vgt_DD), vgt_DD, vgt_pop),
vgt_pop = if_else(!is.na(vgt_adj), vgt_adj, vgt_pop),
vgt_pop = if_else(!is.na(vgt_reg), vgt_reg, vgt_pop),
vgt_pop = if_else(!is.na(vgt_DD_pop), vgt_DD_pop, vgt_pop),
vgt_pop = if_else(!is.na(vgt_adj_pop), vgt_adj_pop, vgt_pop),
Wgt_pop = if_else(!is.na(Wgt_post), Wgt_post, NA_real_),
Wgt_pop = if_else(!is.na(Wgt_DD), Wgt_DD, Wgt_pop),
Wgt_pop = if_else(!is.na(Wgt_adj), Wgt_adj, Wgt_pop),
Wgt_pop = if_else(!is.na(Wgt_reg), Wgt_reg, Wgt_pop),
Wgt_pop = if_else(!is.na(Wgt_DD_pop), Wgt_DD_pop, Wgt_pop),
Wgt_pop = if_else(!is.na(Wgt_adj_pop), Wgt_adj_pop, Wgt_pop),
# Main covariate adjusted effect cluster adjusted
gt = if_else(!is.na(gt_post), gt_post, NA_real_),
gt = if_else(!is.na(gt_DD), gt_DD, gt),
gt = if_else(!is.na(gt_adj), gt_adj, gt),
gt = if_else(!is.na(gt_reg), gt_reg, gt),
vgt = if_else(!is.na(vgt_post), vgt_post, NA_real_),
vgt = if_else(!is.na(vgt_DD), vgt_DD, vgt),
vgt = if_else(!is.na(vgt_adj), vgt_adj, vgt),
vgt = if_else(!is.na(vgt_reg), vgt_reg, vgt),
Wgt = if_else(!is.na(Wgt_post), Wgt_post, NA_real_),
Wgt = if_else(!is.na(Wgt_DD), Wgt_DD, Wgt),
Wgt = if_else(!is.na(Wgt_adj), Wgt_adj, Wgt),
Wgt = if_else(!is.na(Wgt_reg), Wgt_reg, Wgt),
# Hedges g posttest only, adjusted for clustering
# Imputing covariate-adjusted estimate when posttest calculation was not possible
gt_post = if_else(is.na(gt_post) & !is.na(gt_reg), gt_reg, gt_post),
gt_post = if_else(is.na(gt_post) & !is.na(gt_adj), gt_adj, gt_post),
gt_post = if_else(is.na(gt_post) & !is.na(gt_DD), gt_DD, gt_post),
vgt_post = if_else(is.na(vgt_post) & !is.na(vgt_reg), vgt_reg, vgt_post),
vgt_post = if_else(is.na(vgt_post) & !is.na(vgt_adj), vgt_adj, vgt_post),
vgt_post = if_else(is.na(vgt_post) & !is.na(vgt_DD), vgt_DD, vgt_post),
Wgt_post = if_else(is.na(Wgt_post) & !is.na(Wgt_reg), Wgt_reg, Wgt_post),
Wgt_post = if_else(is.na(Wgt_post) & !is.na(Wgt_adj), Wgt_adj, Wgt_post),
Wgt_post = if_else(is.na(Wgt_post) & !is.na(Wgt_DD), Wgt_DD, Wgt_post),
# Hedges' g posttest only, not-adjusted for clustering
# Imputing covariate-adjusted estimate when posttest calculation was not possible
g_post = if_else(is.na(g_post) & !is.na(g_reg), g_reg, g_post),
g_post = if_else(is.na(g_post) & !is.na(g_adj), g_adj, g_post),
g_post = if_else(is.na(g_post) & !is.na(g_DD), g_DD, g_post),
vg_post = if_else(is.na(vg_post) & !is.na(vg_reg), vg_reg, vg_post),
vg_post = if_else(is.na(vg_post) & !is.na(vg_adj), vg_adj, vg_post),
vg_post = if_else(is.na(vg_post) & !is.na(vg_DD), vg_DD, vg_post),
Wg_post = if_else(is.na(Wg_post) & !is.na(Wg_reg), Wg_reg, Wg_post),
Wg_post = if_else(is.na(Wg_post) & !is.na(Wg_adj), Wg_adj, Wg_post),
Wg_post = if_else(is.na(Wg_post) & !is.na(Wg_DD), Wg_DD, Wg_post),
# Cohen's d posttest only, not-adjusted for clustering
# Imputing covariate-adjusted estimate when posttest calculation was not possible
d_post = if_else(is.na(d_post) & !is.na(d_reg), d_reg, d_post),
d_post = if_else(is.na(d_post) & !is.na(d_adj), d_adj, d_post),
d_post = if_else(is.na(d_post) & !is.na(d_DD), d_DD, d_post),
vd_post = if_else(is.na(vd_post) & !is.na(vd_reg), vd_reg, vd_post),
vd_post = if_else(is.na(vd_post) & !is.na(vd_adj), vd_adj, vd_post),
vd_post = if_else(is.na(vd_post) & !is.na(vd_DD), vd_DD, vd_post),
Wd_post = if_else(is.na(Wd_post) & !is.na(Wd_reg), Wd_reg, Wd_post),
Wd_post = if_else(is.na(Wd_post) & !is.na(Wd_adj), Wd_adj, Wd_post),
Wd_post = if_else(is.na(Wd_post) & !is.na(Wd_DD), Wd_DD, Wd_post),
# Covariate adjusted Hedges' g, not cluster adjusted
g = if_else(!is.na(g_post), g_post, NA_real_),
g = if_else(!is.na(g_DD), g_DD, g),
g = if_else(!is.na(g_adj), g_adj, g),
g = if_else(!is.na(g_reg), g_reg, g),
vg = if_else(!is.na(vg_post), vg_post, NA_real_),
vg = if_else(!is.na(vg_DD), vg_DD, vg),
vg = if_else(!is.na(vg_adj), vg_adj, vg),
vg = if_else(!is.na(vg_reg), vg_reg, vg),
Wg = if_else(!is.na(Wg_post), Wg_post, NA_real_),
Wg = if_else(!is.na(Wg_DD), Wg_DD, Wg),
Wg = if_else(!is.na(Wg_adj), Wg_adj, Wg),
Wg = if_else(!is.na(Wg_reg), Wg_reg, Wg),
# Covariate-adjusted version of Cohen's d, neither cluster nor small sample adjusted
d = if_else(!is.na(d_post), d_post, NA_real_),
d = if_else(!is.na(d_DD), d_DD, d),
d = if_else(!is.na(d_adj), d_adj, d),
d = if_else(!is.na(d_reg), d_reg, d),
vd = if_else(!is.na(vd_post), vd_post, NA_real_),
vd = if_else(!is.na(vd_DD), vd_DD, vd),
vd = if_else(!is.na(vd_adj), vd_adj, vd),
vd = if_else(!is.na(vd_reg), vd_reg, vd),
Wd = if_else(!is.na(Wd_post), Wd_post, NA_real_),
Wd = if_else(!is.na(Wd_DD), Wd_DD, Wd),
Wd = if_else(!is.na(Wd_adj), Wd_adj, Wd),
Wd = if_else(!is.na(Wd_reg), Wd_reg, Wd),
inv_sample_size = (1/N_t + 1/N_c),
posttest_only = if_else(ppcor_method == "Posttest only", "Posttest only ES", "Pre-posttest adj. ES", missing = "Pre-posttest adj. ES"),
# ESS = round(4/vgt), # Using cluster bias corrected sampling variance
studyid = if_else(authors == "Gonzalez & Prihoda", 500, studyid),
trt_id = if_else(str_detect(study, "Schaf") & trt_name == "Relapse Prevention Training", 2, trt_id),
cnt = if_else(cnt == "USA", "US", cnt),
design = if_else(design == "QES-pretest", "QES", design),
# MHV: Jeg synes ikke det er en god ide at ændre CRCT til RCT. Jeg vil gerne kunne se forskel.
# design = ifelse(design == "CRCT", "RCT", design),
assessment = if_else(assessment == "Self assesment", "Self assesment", assessment),
randomization = if_else(randomization == "Simple Block Randomization", "Block randomized",
randomization),
randomization = if_else(randomization == "Simple with permuted blocks, stratified by site",
"Stratified randomization", randomization),
randomization = if_else(randomization == "Stratified?",
"Stratified randomization", randomization),
randomization = if_else(is.na(randomization) & studyid == 102,
"Stratified randomization", randomization),
randomization = if_else(randomization == "Ratio and block randomized",
"Block randomized", randomization),
randomization = if_else(randomization == "Block randomized stratified by site",
"Block randomized", randomization),
randomization = if_else(randomization == "Resticted and adapted randomization (i.e. minimization)",
"Stratified randomization", randomization),
randomization = if_else(randomization == "Unequal simple randomization",
"Block randomized", randomization),
randomization = if_else(randomization == "Within-site basis and unequal allocation ratio",
"Stratified randomization", randomization),
trt_type = if_else(trt_type == "Group-based Cognitive Behavioral Therapy",
"Group based Cognitive Behavioural Therapy", trt_type),
trt_type = if_else(trt_type == "Group-based Cognitive Behavioral Therapy",
"Group based Cognitive Behavioural Therapy", trt_type),
trt_type = if_else(trt_type =="Group psychoeducation & Social skill training",
"Group psychoeducation & Social Skill Training", trt_type),
trt_type = if_else(trt_type =="Group psychoeducation",
"Group Psychoeducation", trt_type),
trt_type = if_else(trt_type =="Group psychoeducation & Social Skill Training",
"Group Psychoeducation & Social Skill Training", trt_type),
trt_type = if_else(trt_type =="Education and Illness Management",
"Group Psychoeducation & Social Skill Training", trt_type),
trt_type = if_else(trt_type =="Illness management",
"Illness Management", trt_type),
sample_factors = if_else(sample_factors =="Older with depression and anxiety",
"Mixed", sample_factors),
sample_factors = if_else(sample_factors =="All suffered from severe mental illness",
"Shared Social problem(s)/challenge(s)", sample_factors),
sample_factors = if_else(sample_factors =="Shared origin and psychological distress",
"Mixed", sample_factors),
sample_factors = if_else(sample_factors =="persons with major psychiatric problems",
"Shared Social problem(s)/challenge(s)", sample_factors),
analysis_plan = if_else(analysis_plan == "Unused", "Unused outcomes", analysis_plan),
analysis_plan = case_match(
analysis_plan,
"Hope, Empowerment & Self-efficacy" ~ "Hope, empowerment & self-efficacy",
"Wellbeing and Quality of Life" ~ "Wellbeing and quality of life",
"All mental health outcomes" ~ "General mental health",
"All mental health outcomes/Anxiety" ~ "Anxiety",
"All mental health outcomes/Depression" ~ "Depression",
"All mental health outcomes/Symptoms of psychosis" ~ "Symptoms of psychosis",
"All mental health outcomes/Negative symptoms" ~ "Symptoms of psychosis",
.default = analysis_plan
),
test_type = if_else(test_type == "Clinical administered", "Clinician-rated measure", test_type),
test_type = if_else(test_type == "Clinical interviews", "Clinician-rated measure", test_type),
test_type = if_else(test_type == "Self report", "Self-reported", test_type),
test_type = if_else(test_type == "Self report through clinical interview", "Self-reported", test_type),
test_type = if_else(test_type == "Self-reported via diagnostic interview", "Self-reported", test_type),
measure_type = if_else(measure_type == "Pre-post with controls", "Post-intervention", measure_type),
cluster_treatment = if_else(cluster_treatment == "Hierarchical mixed models", "Mixed-model", cluster_treatment),
cluster_treatment = if_else(cluster_treatment == "Multilevel analysis and clustered standard errors",
"Multilevel analysis", cluster_treatment),
rob_tool = if_else(rob_tool == "Rob2", "RoB2", rob_tool),
rob_tool = if_else(rob_tool == "Rob2 CRCT", "RoB2", rob_tool),
analysis_strategy = if_else(str_detect(study, "Michalak"), "ITT", analysis_strategy),
conventional = if_else(protocol != "Yes", 1, 0),
# Smith et al. 2021 drew on a retropective protocol
conventional = if_else(study == "Smith et al. 2021", 1, conventional),
prereg_chr = if_else(conventional == 0, "Preregistered", "Not preregistered"),
# For publication/selection/small study bias testing
Wse = sqrt(Wgt),
t_i = gt/sqrt(Wgt),
ESS_t = round(N_t/(1+(avg_cl_size - 1)*0.1)),
ESS_c = round(N_c/(1+(avg_cl_size - 1)*0.1)),
ESS_total = round(N_total/(1+(avg_cl_size - 1)*0.1)),
outcome_construct = case_match(
analysis_plan,
# Mental health outcomes
c("General mental health", "Anxiety",
"Depression", "Symptoms of psychosis") ~ "Mental health outcome",
.default = "Reintegrational outcome"
),
# Changing to numeric vectors
across(c(age_mean_sample:male_pct_t, sessions_per_week), ~as.numeric(.x)),
# Make weighted mean weighted by the group sample size
age_mean = if_else(
is.na(age_mean_sample),
(age_mean_t*N_t + age_mean_c*N_c)/(N_t + N_c),
age_mean_sample
),
male_pct = if_else(
is.na(male_pct_sample),
(male_pct_t*N_t + male_pct_c*N_c)/(N_t + N_c),
male_pct_sample
),
# duration_weeks has extract errors
duration_in_weeks = time_from_baseline_weeks - time_after_end_intervention_weeks,
total_number_of_sessions = round(sessions_per_week * duration_in_weeks),
CBT_int = if_else(trt_group == "group-based CBT", "CBT", "Other"),
QES_design = if_else(design == "QES", "QES", "RCT"),
overall_rob = case_match(
Overall,
c("Serious", "High") ~ "Serious/High",
c("Some concerns", "Moderate") ~ "Some concerns/Moderate",
.default = "Low"
),
overall_rob = factor(overall_rob, levels = c("Low", "Some concerns/Moderate", "Serious/High")),
across(schizophrenia_or_primary_psychotic_disorder:dissociative_identity_disorder, ~ replace_na(.x, 0)),
handle_multilevel = as.numeric(if_any(adj_fct_DD:adj_fct_reg, ~ grepl("gamma", .))),
handle_multilevel = if_else(handle_multilevel == 1, "Yes", "No")
) |>
rowwise() |>
mutate(
diagnosis = {
col_ones <- names(
across(.cols = schizophrenia_or_primary_psychotic_disorder:dissociative_identity_disorder)
)[unlist(
c_across(schizophrenia_or_primary_psychotic_disorder:dissociative_identity_disorder)
) == 1]
n_ones <- length(col_ones)
if (n_ones == 1) col_ones
else if (n_ones > 1) "mixed"
}
) |>
ungroup() |>
mutate(
schizophrenia = if_else(str_detect(diagnosis, "schizophrenia"), "Schizophrenia", "Other")
) |>
mutate(
# Used to remove ITT outcomes from Cano-Vindel et al. 2021 and Craigie & Nathan 2009
n_analysis_strategies = n_distinct(analysis_strategy),
.by = study
) |>
# Removing ITT analyses from Cano-Vindel et al. 2021 and Craigie & Nathan 2009
filter(!c(str_detect(study, "Cano|Craigie|Woj") & analysis_strategy == "ITT")) Show the code
time_vcalc <- c(
# Acarturk
1,2,1,2,1,2,
# Barbic
1,1,1,
# Bond
1,1,
# Baekkelund,
1,1,2,2,
# Cano-Vindel
rep(c(1:4), each = 10),
# Craigie & Nathan
1,1,1,
# Crawford (multi-treatment)
rep(c(1,2), each = 2, 4),
# Druss 2010
1,1,
#Druss 2018
1,1,1,2,2,2,
# Dyck
1,
# Gestel-Timmermans
rep(c(1,2), 5),
# Gatz
rep(1,5),
# Gonzalaez
rep(1,2),
# Gordon
rep(1,4),
# Gutman
rep(1,2),
# Hagen
rep(1,4),
# Halperin
rep(1, 6),
# Haslem
rep(1,3),
# Hilden
rep(1,7),
# Himle
rep(c(1,2), each = 6),
#Jacob
rep(c(1,2), each = 5),
#James
rep(1,5),
# Kanie
rep(1,4),
# Lim
rep(1,6),
# Llyod-Evans
rep(1,4),
# Madigan
rep(c(1,2), each = 6),
# McCay 2006
rep(1,4),
# McCay 2007
rep(1,3),
# Michalak (multi-treatment)
rep(1,14),
# Morley
rep(1,4),
# Morton
rep(1,5),
# Patterson
rep(c(1,2), each = 5),
# Popolo
rep(1,2),
# Rabenstein
rep(1,3),
# Rosenblum
rep(1,4),
# Russinova
rep(c(1,2), each = 5),
# Rusch
rep(c(1,2), each = 6),
# Sacks
rep(1,5),
# Sajatovic
rep(c(1:3), each = 3),
# Saloheimo
1,
# Schrank
rep(1,6),
# Schafer (multi-treatment)
rep(c(2,3,1), each = 2, 6),
# Somers
rep(1,5),
# Tjaden
rep(c(1,2), each = 4),
# Valiente
rep(1,16),
# Volpe
rep(1,4),
# Wojtalik
rep(1,2),
#Wuthrich
rep(1,4),
# Smith
rep(1,3)
)
gb_dat$time <- time_vcalc
#saveRDS(gb_dat, file = "Data/gb_dat.rds")Creating primary and secondary data
Below, we separate the data by reintegrational (primary analysis) and mental health outcomes (secondary analyses)
A general overview of the main data, we use for analyses of reintegrational outcomes can be found in the scroll box below.
Show the code
reintegration_dat <-
gb_dat |>
filter(outcome_construct == "Reintegrational outcome")
saveRDS(reintegration_dat, file = "reintegration_dat.rds")
reint_overview <-
reintegration_dat |>
select(
study, eppi_id, esid, N_t, N_c, N_total, inv_sample_size, gt_pop, vgt_pop, Wgt_pop, gt, vgt, Wgt, Wse,
prereg_chr, conventional, analysis_plan, Overall, D5, D7, timing
)
reint_overview |>
mutate(
p_val = 2 * ( 1 - pnorm( abs(gt_pop) / sqrt(vgt_pop) ) )
) |>
select(
`Authors (year)` = study, N_t, N_c,
`Outcome construct` = analysis_plan, gt_pop, vgt_pop, Wgt, Wse, p_val,
`No protocol` = conventional, `Overall RoB` = Overall
) |>
kable(digits=3) |>
kable_styling(
bootstrap_options = c("striped", "hover"),
font_size = 10
) |>
scroll_box(width = "100%", height = "600px", fixed_thead = TRUE)| Authors (year) | N_t | N_c | Outcome construct | gt_pop | vgt_pop | Wgt | Wse | p_val | No protocol | Overall RoB |
|---|---|---|---|---|---|---|---|---|---|---|
| Acarturk et al. 2022 | 24 | 22 | Wellbeing and quality of life | 0.314 | 0.196 | 0.195 | 0.442 | 0.478 | 0 | Some concerns |
| Acarturk et al. 2022 | 24 | 22 | Wellbeing and quality of life | -0.103 | 0.091 | 0.091 | 0.301 | 0.733 | 0 | High |
| Barbic et al. 2009 | 16 | 17 | Hope, empowerment & self-efficacy | 0.443 | 0.162 | 0.159 | 0.399 | 0.272 | 1 | Some concerns |
| Barbic et al. 2009 | 16 | 17 | Wellbeing and quality of life | -0.069 | 0.159 | 0.159 | 0.399 | 0.863 | 1 | Some concerns |
| Barbic et al. 2009 | 16 | 17 | Hope, empowerment & self-efficacy | 0.548 | 0.164 | 0.159 | 0.399 | 0.176 | 1 | Some concerns |
| Bond et al. 2015 | 43 | 42 | Hope, empowerment & self-efficacy | 0.000 | 0.094 | 0.094 | 0.306 | 1.000 | 1 | Some concerns |
| Bond et al. 2015 | 43 | 41 | Psychiatric hospitalization | 0.309 | 0.095 | 0.094 | 0.307 | 0.316 | 1 | Some concerns |
| Baekkelund et al. 2022 | 29 | 30 | Social functioning (degree of impairment) | -0.082 | 0.078 | 0.082 | 0.286 | 0.769 | 0 | Low |
| Baekkelund et al. 2022 | 29 | 30 | Social functioning (degree of impairment) | 0.142 | 0.084 | 0.088 | 0.297 | 0.624 | 0 | Low |
| Cano-Vindel et al. 2021 | 315 | 316 | Social functioning (degree of impairment) | 0.259 | 0.006 | 0.006 | 0.080 | 0.001 | 0 | Low |
| Cano-Vindel et al. 2021 | 315 | 316 | Social functioning (degree of impairment) | 0.428 | 0.005 | 0.005 | 0.072 | 0.000 | 0 | Low |
| Cano-Vindel et al. 2021 | 315 | 316 | Social functioning (degree of impairment) | 0.439 | 0.007 | 0.007 | 0.082 | 0.000 | 0 | Low |
| Cano-Vindel et al. 2021 | 315 | 316 | Wellbeing and quality of life | 0.565 | 0.006 | 0.006 | 0.076 | 0.000 | 0 | Low |
| Cano-Vindel et al. 2021 | 315 | 316 | Wellbeing and quality of life | 0.593 | 0.005 | 0.005 | 0.069 | 0.000 | 0 | Low |
| Cano-Vindel et al. 2021 | 315 | 316 | Wellbeing and quality of life | 0.305 | 0.005 | 0.005 | 0.069 | 0.000 | 0 | Low |
| Cano-Vindel et al. 2021 | 315 | 316 | Wellbeing and quality of life | 0.389 | 0.007 | 0.007 | 0.083 | 0.000 | 0 | Low |
| Cano-Vindel et al. 2021 | 273 | 238 | Social functioning (degree of impairment) | 0.066 | 0.008 | 0.008 | 0.088 | 0.450 | 0 | Low |
| Cano-Vindel et al. 2021 | 273 | 238 | Social functioning (degree of impairment) | 0.128 | 0.006 | 0.006 | 0.079 | 0.105 | 0 | Low |
| Cano-Vindel et al. 2021 | 273 | 238 | Social functioning (degree of impairment) | 0.224 | 0.008 | 0.008 | 0.090 | 0.013 | 0 | Low |
| Cano-Vindel et al. 2021 | 273 | 238 | Wellbeing and quality of life | 0.301 | 0.007 | 0.007 | 0.083 | 0.000 | 0 | Low |
| Cano-Vindel et al. 2021 | 273 | 238 | Wellbeing and quality of life | 0.308 | 0.006 | 0.006 | 0.076 | 0.000 | 0 | Low |
| Cano-Vindel et al. 2021 | 273 | 238 | Wellbeing and quality of life | 0.211 | 0.006 | 0.006 | 0.076 | 0.005 | 0 | Low |
| Cano-Vindel et al. 2021 | 273 | 238 | Wellbeing and quality of life | 0.194 | 0.008 | 0.008 | 0.091 | 0.033 | 0 | Low |
| Cano-Vindel et al. 2021 | 229 | 204 | Social functioning (degree of impairment) | 0.342 | 0.009 | 0.009 | 0.095 | 0.000 | 0 | Low |
| Cano-Vindel et al. 2021 | 229 | 204 | Social functioning (degree of impairment) | 0.357 | 0.008 | 0.007 | 0.086 | 0.000 | 0 | Low |
| Cano-Vindel et al. 2021 | 229 | 204 | Social functioning (degree of impairment) | 0.403 | 0.010 | 0.010 | 0.098 | 0.000 | 0 | Low |
| Cano-Vindel et al. 2021 | 229 | 204 | Wellbeing and quality of life | 0.381 | 0.008 | 0.008 | 0.091 | 0.000 | 0 | Low |
| Cano-Vindel et al. 2021 | 229 | 204 | Wellbeing and quality of life | 0.232 | 0.007 | 0.007 | 0.082 | 0.005 | 0 | Low |
| Cano-Vindel et al. 2021 | 229 | 204 | Wellbeing and quality of life | 0.083 | 0.007 | 0.007 | 0.082 | 0.313 | 0 | Low |
| Cano-Vindel et al. 2021 | 229 | 204 | Wellbeing and quality of life | 0.179 | 0.010 | 0.010 | 0.099 | 0.072 | 0 | Low |
| Cano-Vindel et al. 2021 | 208 | 180 | Social functioning (degree of impairment) | 0.455 | 0.010 | 0.010 | 0.101 | 0.000 | 0 | Low |
| Cano-Vindel et al. 2021 | 208 | 180 | Social functioning (degree of impairment) | 0.457 | 0.008 | 0.008 | 0.091 | 0.000 | 0 | Low |
| Cano-Vindel et al. 2021 | 208 | 180 | Social functioning (degree of impairment) | 0.512 | 0.011 | 0.011 | 0.103 | 0.000 | 0 | Low |
| Cano-Vindel et al. 2021 | 208 | 180 | Wellbeing and quality of life | 0.598 | 0.010 | 0.009 | 0.096 | 0.000 | 0 | Low |
| Cano-Vindel et al. 2021 | 208 | 180 | Wellbeing and quality of life | 0.410 | 0.008 | 0.008 | 0.087 | 0.000 | 0 | Low |
| Cano-Vindel et al. 2021 | 208 | 180 | Wellbeing and quality of life | 0.281 | 0.008 | 0.008 | 0.087 | 0.001 | 0 | Low |
| Cano-Vindel et al. 2021 | 208 | 180 | Wellbeing and quality of life | 0.245 | 0.011 | 0.011 | 0.105 | 0.020 | 0 | Low |
| Craigie & Nathan 2009 | 157 | 77 | Wellbeing and quality of life | -0.247 | 0.026 | 0.026 | 0.162 | 0.129 | 1 | Serious |
| Crawford et al. 2012 | 121 | 121 | Social functioning (degree of impairment) | -0.022 | 0.024 | 0.025 | 0.159 | 0.885 | 0 | Low |
| Crawford et al. 2012 | 119 | 121 | Social functioning (degree of impairment) | -0.052 | 0.024 | 0.026 | 0.160 | 0.739 | 0 | Low |
| Crawford et al. 2012 | 121 | 117 | Social functioning (degree of impairment) | -0.039 | 0.019 | 0.020 | 0.141 | 0.779 | 0 | Low |
| Crawford et al. 2012 | 117 | 117 | Social functioning (degree of impairment) | -0.085 | 0.019 | 0.020 | 0.142 | 0.542 | 0 | Low |
| Crawford et al. 2012 | 121 | 121 | Social functioning (degree of impairment) | -0.265 | 0.022 | 0.021 | 0.147 | 0.071 | 0 | Low |
| Crawford et al. 2012 | 119 | 121 | Social functioning (degree of impairment) | -0.137 | 0.022 | 0.022 | 0.147 | 0.352 | 0 | Low |
| Crawford et al. 2012 | 121 | 117 | Social functioning (degree of impairment) | -0.209 | 0.022 | 0.022 | 0.147 | 0.158 | 0 | Low |
| Crawford et al. 2012 | 117 | 117 | Social functioning (degree of impairment) | -0.081 | 0.022 | 0.022 | 0.149 | 0.588 | 0 | Low |
| Crawford et al. 2012 | 121 | 121 | Wellbeing and quality of life | 0.203 | 0.022 | 0.021 | 0.147 | 0.168 | 0 | Low |
| Crawford et al. 2012 | 119 | 121 | Wellbeing and quality of life | 0.074 | 0.022 | 0.022 | 0.147 | 0.616 | 0 | Low |
| Crawford et al. 2012 | 121 | 117 | Wellbeing and quality of life | 0.177 | 0.022 | 0.022 | 0.147 | 0.229 | 0 | Low |
| Crawford et al. 2012 | 117 | 117 | Wellbeing and quality of life | 0.166 | 0.022 | 0.022 | 0.149 | 0.266 | 0 | Low |
| Druss et al. 2010 | 41 | 39 | Wellbeing and quality of life | 0.207 | 0.065 | 0.065 | 0.254 | 0.417 | 0 | High |
| Druss et al. 2010 | 41 | 39 | Wellbeing and quality of life | 0.035 | 0.065 | 0.065 | 0.254 | 0.890 | 0 | High |
| Druss et al. 2018 | 198 | 202 | Hope, empowerment & self-efficacy | 0.204 | 0.013 | 0.013 | 0.114 | 0.074 | 0 | Some concerns |
| Druss et al. 2018 | 198 | 202 | Wellbeing and quality of life | 0.055 | 0.013 | 0.013 | 0.114 | 0.630 | 0 | Some concerns |
| Druss et al. 2018 | 198 | 202 | Wellbeing and quality of life | 0.019 | 0.013 | 0.013 | 0.114 | 0.866 | 0 | Some concerns |
| Druss et al. 2018 | 198 | 202 | Hope, empowerment & self-efficacy | 0.113 | 0.013 | 0.013 | 0.114 | 0.321 | 0 | Some concerns |
| Druss et al. 2018 | 198 | 202 | Wellbeing and quality of life | 0.102 | 0.013 | 0.013 | 0.114 | 0.373 | 0 | Some concerns |
| Druss et al. 2018 | 198 | 202 | Wellbeing and quality of life | 0.169 | 0.013 | 0.013 | 0.114 | 0.140 | 0 | Some concerns |
| Gestel-Timmermans et al. 2012 | 136 | 117 | Hope, empowerment & self-efficacy | 0.193 | 0.014 | 0.014 | 0.118 | 0.103 | 0 | High |
| Gestel-Timmermans et al. 2012 | 121 | 99 | Hope, empowerment & self-efficacy | 0.156 | 0.014 | 0.014 | 0.120 | 0.192 | 0 | High |
| Gestel-Timmermans et al. 2012 | 132 | 118 | Hope, empowerment & self-efficacy | 0.122 | 0.014 | 0.014 | 0.117 | 0.298 | 0 | High |
| Gestel-Timmermans et al. 2012 | 120 | 97 | Hope, empowerment & self-efficacy | 0.348 | 0.017 | 0.017 | 0.129 | 0.008 | 0 | High |
| Gestel-Timmermans et al. 2012 | 138 | 122 | Loneliness | -0.196 | 0.014 | 0.014 | 0.116 | 0.093 | 0 | High |
| Gestel-Timmermans et al. 2012 | 125 | 102 | Loneliness | -0.039 | 0.014 | 0.014 | 0.117 | 0.740 | 0 | High |
| Gestel-Timmermans et al. 2012 | 124 | 114 | Wellbeing and quality of life | -0.045 | 0.011 | 0.011 | 0.106 | 0.675 | 0 | High |
| Gestel-Timmermans et al. 2012 | 111 | 97 | Wellbeing and quality of life | -0.039 | 0.012 | 0.012 | 0.111 | 0.727 | 0 | High |
| Gatz et al. 2007 | 136 | 177 | Alcohol and drug abuse/misuse | 0.094 | 0.023 | 0.022 | 0.150 | 0.531 | 1 | Serious |
| Gatz et al. 2007 | 135 | 176 | Alcohol and drug abuse/misuse | 0.204 | 0.046 | 0.046 | 0.214 | 0.341 | 1 | Serious |
| Gatz et al. 2007 | 134 | 173 | Hope, empowerment & self-efficacy | 0.241 | 0.019 | 0.019 | 0.138 | 0.082 | 1 | Serious |
| Gonzalez & Prihoda 2007 | 8 | 9 | Social functioning (degree of impairment) | 0.206 | 0.287 | 0.189 | 0.434 | 0.701 | 1 | Serious |
| Gordon et al. 2018 | 21 | 15 | Wellbeing and quality of life | 0.258 | 0.142 | 0.141 | 0.375 | 0.494 | 1 | Some concerns |
| Gordon et al. 2018 | 21 | 15 | Social functioning (degree of impairment) | -0.388 | 0.143 | 0.141 | 0.375 | 0.305 | 1 | Some concerns |
| Gordon et al. 2018 | 21 | 15 | Social functioning (degree of impairment) | 0.183 | 0.141 | 0.141 | 0.375 | 0.627 | 1 | Some concerns |
| Gutman et al. 2019 | 10 | 10 | Wellbeing and quality of life | 0.501 | 0.033 | 0.026 | 0.162 | 0.006 | 1 | Serious |
| Hagen et al. 2005 | 14 | 17 | Social functioning (degree of impairment) | -0.039 | 0.174 | 0.174 | 0.418 | 0.925 | 1 | High |
| Halperin et al. 2000 | 7 | 9 | Social functioning (degree of impairment) | 0.578 | 0.074 | 0.062 | 0.250 | 0.034 | 1 | High |
| Halperin et al. 2000 | 7 | 9 | Wellbeing and quality of life | 0.555 | 0.034 | 0.023 | 0.151 | 0.003 | 1 | High |
| Halperin et al. 2000 | 7 | 9 | Alcohol and drug abuse/misuse | 0.374 | 0.132 | 0.127 | 0.356 | 0.302 | 1 | High |
| Haslam et al. 2019 | 66 | 54 | Loneliness | -0.246 | 0.006 | 0.005 | 0.073 | 0.001 | 0 | High |
| Hilden et al. 2021 | 23 | 12 | Physical health | 0.189 | 0.138 | 0.140 | 0.375 | 0.612 | 0 | High |
| Hilden et al. 2021 | 23 | 12 | Alcohol and drug abuse/misuse | 0.070 | 0.140 | 0.140 | 0.375 | 0.852 | 0 | High |
| Hilden et al. 2021 | 23 | 12 | Social functioning (degree of impairment) | -0.283 | 0.142 | 0.140 | 0.375 | 0.452 | 0 | High |
| Hilden et al. 2021 | 23 | 12 | Social functioning (degree of impairment) | 0.434 | 0.143 | 0.140 | 0.375 | 0.252 | 0 | High |
| Hilden et al. 2021 | 23 | 12 | Social functioning (degree of impairment) | 0.036 | 0.140 | 0.140 | 0.375 | 0.924 | 0 | High |
| Himle et al. 2014 | 29 | 29 | Physical health | 0.507 | 0.083 | 0.083 | 0.288 | 0.079 | 0 | Some concerns |
| Himle et al. 2014 | 29 | 29 | Social functioning (degree of impairment) | 0.464 | 0.085 | 0.083 | 0.288 | 0.111 | 0 | Some concerns |
| Himle et al. 2014 | 29 | 29 | Physical health | 0.523 | 0.083 | 0.083 | 0.288 | 0.070 | 0 | Some concerns |
| Himle et al. 2014 | 29 | 29 | Social functioning (degree of impairment) | 0.819 | 0.089 | 0.083 | 0.288 | 0.006 | 0 | Some concerns |
| Jacob et al. 2010 | 19 | 24 | Self-esteem | 0.495 | 0.120 | 0.116 | 0.341 | 0.152 | 1 | Serious |
| Jacob et al. 2010 | 19 | 24 | Self-esteem | 0.442 | 0.119 | 0.116 | 0.341 | 0.200 | 1 | Serious |
| Jacob et al. 2010 | 19 | 24 | Self-esteem | 0.133 | 0.117 | 0.116 | 0.341 | 0.697 | 1 | Serious |
| Jacob et al. 2010 | 19 | 24 | Self-esteem | 0.053 | 0.116 | 0.116 | 0.341 | 0.876 | 1 | Serious |
| Jacob et al. 2010 | 19 | 24 | Self-esteem | 0.392 | 0.118 | 0.116 | 0.341 | 0.255 | 1 | Serious |
| Jacob et al. 2010 | 19 | 24 | Self-esteem | 0.433 | 0.119 | 0.116 | 0.341 | 0.209 | 1 | Serious |
| Jacob et al. 2010 | 19 | 24 | Self-esteem | 0.222 | 0.117 | 0.116 | 0.341 | 0.516 | 1 | Serious |
| Jacob et al. 2010 | 19 | 24 | Self-esteem | -0.121 | 0.117 | 0.116 | 0.341 | 0.724 | 1 | Serious |
| James et al. 2004 | 29 | 29 | Alcohol and drug abuse/misuse | 1.120 | 0.094 | 0.083 | 0.288 | 0.000 | 1 | Some concerns |
| James et al. 2004 | 29 | 29 | Alcohol and drug abuse/misuse | 0.281 | 0.083 | 0.083 | 0.288 | 0.331 | 1 | Some concerns |
| James et al. 2004 | 28 | 29 | Alcohol and drug abuse/misuse | 0.538 | 0.087 | 0.085 | 0.291 | 0.069 | 1 | Some concerns |
| Kanie et al. 2019 | 32 | 29 | Social functioning (degree of impairment) | -0.177 | 0.075 | 0.078 | 0.279 | 0.517 | 0 | Low |
| Kanie et al. 2019 | 32 | 29 | Social functioning (degree of impairment) | 0.037 | 0.078 | 0.078 | 0.279 | 0.896 | 0 | Low |
| Lim et al. 2020 | 18 | 21 | Wellbeing and quality of life | 0.862 | 0.148 | 0.137 | 0.371 | 0.025 | 1 | Serious |
| Lloyd-Evans et al. 2020 | 25 | 10 | Loneliness | 0.103 | 0.158 | 0.158 | 0.398 | 0.796 | 0 | Low |
| Lloyd-Evans et al. 2020 | 25 | 10 | Wellbeing and quality of life | 0.214 | 0.159 | 0.158 | 0.398 | 0.591 | 0 | Low |
| Madigan et al. 2013 | 36 | 18 | Alcohol and drug abuse/misuse | 0.024 | 0.097 | 0.097 | 0.312 | 0.940 | 1 | Some concerns |
| Madigan et al. 2013 | 39 | 19 | Social functioning (degree of impairment) | 0.038 | 0.087 | 0.091 | 0.302 | 0.898 | 1 | Some concerns |
| Madigan et al. 2013 | 34 | 15 | Wellbeing and quality of life | 0.490 | 0.113 | 0.110 | 0.332 | 0.144 | 1 | Some concerns |
| Madigan et al. 2013 | 28 | 14 | Alcohol and drug abuse/misuse | 0.049 | 0.125 | 0.125 | 0.354 | 0.891 | 1 | Some concerns |
| Madigan et al. 2013 | 31 | 16 | Social functioning (degree of impairment) | 0.008 | 0.106 | 0.111 | 0.333 | 0.982 | 1 | Some concerns |
| Madigan et al. 2013 | 34 | 14 | Wellbeing and quality of life | 0.677 | 0.119 | 0.114 | 0.338 | 0.050 | 1 | Some concerns |
| McCay et al. 2006 | 26 | 14 | Self-esteem | 0.521 | 0.052 | 0.048 | 0.219 | 0.022 | 1 | Serious |
| McCay et al. 2006 | 26 | 14 | Wellbeing and quality of life | 0.129 | 0.109 | 0.108 | 0.329 | 0.694 | 1 | Serious |
| McCay et al. 2007 | 29 | 18 | Self-esteem | 0.386 | 0.018 | 0.016 | 0.128 | 0.004 | 1 | High |
| McCay et al. 2007 | 29 | 18 | Wellbeing and quality of life | 0.509 | 0.019 | 0.016 | 0.126 | 0.000 | 1 | High |
| McCay et al. 2007 | 29 | 18 | Hope, empowerment & self-efficacy | 0.400 | 0.021 | 0.019 | 0.137 | 0.005 | 1 | High |
| Michalak et al. 2015 | 36 | 35 | Wellbeing and quality of life | 0.299 | 0.055 | 0.054 | 0.233 | 0.203 | 0 | Some concerns |
| Michalak et al. 2015 | 35 | 35 | Wellbeing and quality of life | 0.349 | 0.033 | 0.032 | 0.180 | 0.056 | 0 | Some concerns |
| Michalak et al. 2015 | 36 | 35 | Wellbeing and quality of life | 0.115 | 0.032 | 0.031 | 0.177 | 0.519 | 0 | Some concerns |
| Michalak et al. 2015 | 35 | 35 | Wellbeing and quality of life | 0.329 | 0.037 | 0.036 | 0.190 | 0.087 | 0 | Some concerns |
| Michalak et al. 2015 | 36 | 35 | Wellbeing and quality of life | 0.472 | 0.054 | 0.052 | 0.229 | 0.043 | 0 | Some concerns |
| Michalak et al. 2015 | 35 | 35 | Wellbeing and quality of life | 0.410 | 0.044 | 0.043 | 0.207 | 0.052 | 0 | Some concerns |
| Michalak et al. 2015 | 36 | 35 | Wellbeing and quality of life | 0.134 | 0.039 | 0.038 | 0.196 | 0.495 | 0 | Some concerns |
| Michalak et al. 2015 | 35 | 35 | Wellbeing and quality of life | 0.270 | 0.035 | 0.035 | 0.186 | 0.151 | 0 | Some concerns |
| Michalak et al. 2015 | 36 | 35 | Social functioning (degree of impairment) | 0.567 | 0.055 | 0.052 | 0.229 | 0.015 | 0 | Some concerns |
| Michalak et al. 2015 | 35 | 35 | Social functioning (degree of impairment) | 0.389 | 0.045 | 0.044 | 0.209 | 0.066 | 0 | Some concerns |
| Morley et al. 2014 | 122 | 63 | Hope, empowerment & self-efficacy | 0.296 | 0.028 | 0.027 | 0.166 | 0.075 | 1 | Some concerns |
| Morton et al. 2012 | 21 | 20 | Hope, empowerment & self-efficacy | 0.985 | 0.091 | 0.078 | 0.279 | 0.001 | 1 | Some concerns |
| Patterson et al. 2003 | 16 | 16 | Wellbeing and quality of life | 0.109 | 0.163 | 0.162 | 0.403 | 0.788 | 1 | Some concerns |
| Patterson et al. 2003 | 16 | 16 | Wellbeing and quality of life | -0.268 | 0.164 | 0.162 | 0.403 | 0.508 | 1 | Some concerns |
| Rabenstein et al. 2016 | 153 | 148 | Wellbeing and quality of life | 0.415 | 0.018 | 0.018 | 0.133 | 0.002 | 1 | Moderate |
| Rosenblum et al. 2014 | 91 | 70 | Alcohol and drug abuse/misuse | 0.129 | 0.032 | 0.032 | 0.178 | 0.468 | 0 | Some concerns |
| Rosenblum et al. 2014 | 91 | 70 | Alcohol and drug abuse/misuse | 0.325 | 0.032 | 0.032 | 0.178 | 0.069 | 0 | Some concerns |
| Rosenblum et al. 2014 | 91 | 70 | Alcohol and drug abuse/misuse | 0.168 | 0.032 | 0.032 | 0.178 | 0.345 | 0 | Some concerns |
| Rosenblum et al. 2014 | 91 | 70 | Alcohol and drug abuse/misuse | 0.178 | 0.032 | 0.032 | 0.178 | 0.318 | 0 | Some concerns |
| Russinova et al. 2018 | 22 | 26 | Hope, empowerment & self-efficacy | 0.131 | 0.112 | 0.112 | 0.334 | 0.696 | 1 | Some concerns |
| Russinova et al. 2018 | 22 | 26 | Self-esteem | 0.716 | 0.118 | 0.112 | 0.334 | 0.037 | 1 | Some concerns |
| Russinova et al. 2018 | 22 | 26 | Hope, empowerment & self-efficacy | 0.101 | 0.112 | 0.112 | 0.334 | 0.762 | 1 | Some concerns |
| Russinova et al. 2018 | 22 | 26 | Employment | 0.296 | 0.113 | 0.112 | 0.334 | 0.378 | 1 | Some concerns |
| Russinova et al. 2018 | 21 | 24 | Hope, empowerment & self-efficacy | -0.117 | 0.119 | 0.118 | 0.344 | 0.733 | 1 | Some concerns |
| Russinova et al. 2018 | 22 | 25 | Hope, empowerment & self-efficacy | 0.181 | 0.114 | 0.113 | 0.337 | 0.591 | 1 | Some concerns |
| Russinova et al. 2018 | 22 | 25 | Self-esteem | 0.225 | 0.114 | 0.113 | 0.337 | 0.505 | 1 | Some concerns |
| Russinova et al. 2018 | 22 | 25 | Hope, empowerment & self-efficacy | -0.113 | 0.113 | 0.113 | 0.337 | 0.737 | 1 | Some concerns |
| Russinova et al. 2018 | 22 | 25 | Employment | 0.030 | 0.113 | 0.113 | 0.337 | 0.930 | 1 | Some concerns |
| Russinova et al. 2018 | 21 | 24 | Hope, empowerment & self-efficacy | 0.000 | 0.118 | 0.118 | 0.344 | 1.000 | 1 | Some concerns |
| Rusch et al. 2019 | 18 | 17 | Hope, empowerment & self-efficacy | 0.333 | 0.104 | 0.102 | 0.319 | 0.301 | 0 | Some concerns |
| Rusch et al. 2019 | 18 | 17 | Hope, empowerment & self-efficacy | -0.094 | 0.057 | 0.057 | 0.239 | 0.694 | 0 | Some concerns |
| Rusch et al. 2019 | 18 | 17 | Hope, empowerment & self-efficacy | 0.650 | 0.125 | 0.118 | 0.344 | 0.066 | 0 | Some concerns |
| Rusch et al. 2019 | 18 | 17 | Self-esteem | 0.511 | 0.035 | 0.031 | 0.177 | 0.006 | 0 | Some concerns |
| Rusch et al. 2019 | 18 | 17 | Hope, empowerment & self-efficacy | 0.522 | 0.107 | 0.103 | 0.321 | 0.111 | 0 | Some concerns |
| Rusch et al. 2019 | 20 | 13 | Hope, empowerment & self-efficacy | 0.196 | 0.155 | 0.154 | 0.393 | 0.618 | 0 | Some concerns |
| Rusch et al. 2019 | 20 | 13 | Hope, empowerment & self-efficacy | -0.258 | 0.155 | 0.154 | 0.393 | 0.512 | 0 | Some concerns |
| Rusch et al. 2019 | 20 | 13 | Hope, empowerment & self-efficacy | 0.772 | 0.391 | 0.381 | 0.617 | 0.217 | 0 | Some concerns |
| Rusch et al. 2019 | 20 | 13 | Self-esteem | 0.338 | 0.094 | 0.092 | 0.304 | 0.271 | 0 | Some concerns |
| Rusch et al. 2019 | 20 | 13 | Hope, empowerment & self-efficacy | 0.724 | 0.274 | 0.266 | 0.515 | 0.167 | 0 | Some concerns |
| Sacks et al. 2011 | 38 | 38 | Wellbeing and quality of life | 0.074 | 0.068 | 0.068 | 0.262 | 0.779 | 1 | Some concerns |
| Sacks et al. 2011 | 38 | 38 | Wellbeing and quality of life | -0.269 | 0.069 | 0.068 | 0.262 | 0.305 | 1 | Some concerns |
| Sacks et al. 2011 | 38 | 38 | Wellbeing and quality of life | 0.953 | 0.075 | 0.068 | 0.262 | 0.000 | 1 | Some concerns |
| Sajatovic et al. 2009 | 61 | 61 | Social functioning (degree of impairment) | 0.220 | 0.041 | 0.041 | 0.202 | 0.279 | 1 | Some concerns |
| Sajatovic et al. 2009 | 46 | 53 | Social functioning (degree of impairment) | 0.086 | 0.052 | 0.052 | 0.228 | 0.706 | 1 | Some concerns |
| Sajatovic et al. 2009 | 40 | 39 | Social functioning (degree of impairment) | 0.059 | 0.063 | 0.063 | 0.251 | 0.815 | 1 | Some concerns |
| Schrank et al. 2016 | 43 | 41 | Wellbeing and quality of life | -0.104 | 0.062 | 0.061 | 0.248 | 0.675 | 0 | Low |
| Schrank et al. 2016 | 43 | 41 | Wellbeing and quality of life | 0.445 | 0.063 | 0.061 | 0.248 | 0.076 | 0 | Low |
| Schrank et al. 2016 | 43 | 41 | Hope, empowerment & self-efficacy | -0.341 | 0.062 | 0.061 | 0.248 | 0.171 | 0 | Low |
| Schrank et al. 2016 | 43 | 41 | Hope, empowerment & self-efficacy | 0.021 | 0.061 | 0.061 | 0.248 | 0.932 | 0 | Low |
| Schrank et al. 2016 | 43 | 41 | Hope, empowerment & self-efficacy | 0.148 | 0.062 | 0.061 | 0.248 | 0.550 | 0 | Low |
| Schafer et al. 2019 | 115 | 117 | Alcohol and drug abuse/misuse | 0.144 | 0.023 | 0.022 | 0.150 | 0.339 | 0 | Some concerns |
| Schafer et al. 2019 | 111 | 117 | Alcohol and drug abuse/misuse | 0.151 | 0.023 | 0.023 | 0.152 | 0.321 | 0 | Some concerns |
| Schafer et al. 2019 | 115 | 117 | Alcohol and drug abuse/misuse | 0.346 | 0.023 | 0.022 | 0.150 | 0.022 | 0 | Some concerns |
| Schafer et al. 2019 | 111 | 117 | Alcohol and drug abuse/misuse | -0.036 | 0.023 | 0.023 | 0.152 | 0.813 | 0 | Some concerns |
| Schafer et al. 2019 | 115 | 117 | Alcohol and drug abuse/misuse | 0.223 | 0.023 | 0.022 | 0.150 | 0.138 | 0 | Some concerns |
| Schafer et al. 2019 | 111 | 117 | Alcohol and drug abuse/misuse | 0.148 | 0.023 | 0.023 | 0.152 | 0.329 | 0 | Some concerns |
| Schafer et al. 2019 | 115 | 117 | Alcohol and drug abuse/misuse | 0.088 | 0.022 | 0.022 | 0.150 | 0.558 | 0 | Some concerns |
| Schafer et al. 2019 | 111 | 117 | Alcohol and drug abuse/misuse | 0.000 | 0.023 | 0.023 | 0.152 | 1.000 | 0 | Some concerns |
| Schafer et al. 2019 | 115 | 117 | Alcohol and drug abuse/misuse | 0.369 | 0.023 | 0.022 | 0.150 | 0.015 | 0 | Some concerns |
| Schafer et al. 2019 | 111 | 117 | Alcohol and drug abuse/misuse | 0.184 | 0.023 | 0.023 | 0.152 | 0.226 | 0 | Some concerns |
| Schafer et al. 2019 | 115 | 117 | Alcohol and drug abuse/misuse | 0.264 | 0.023 | 0.022 | 0.150 | 0.079 | 0 | Some concerns |
| Schafer et al. 2019 | 111 | 117 | Alcohol and drug abuse/misuse | 0.084 | 0.023 | 0.023 | 0.152 | 0.579 | 0 | Some concerns |
| Schafer et al. 2019 | 115 | 117 | Alcohol and drug abuse/misuse | -0.306 | 0.023 | 0.022 | 0.150 | 0.042 | 0 | Some concerns |
| Schafer et al. 2019 | 111 | 117 | Alcohol and drug abuse/misuse | -0.074 | 0.023 | 0.023 | 0.152 | 0.625 | 0 | Some concerns |
| Schafer et al. 2019 | 115 | 117 | Alcohol and drug abuse/misuse | -0.495 | 0.023 | 0.022 | 0.150 | 0.001 | 0 | Some concerns |
| Schafer et al. 2019 | 111 | 117 | Alcohol and drug abuse/misuse | -0.249 | 0.023 | 0.023 | 0.152 | 0.101 | 0 | Some concerns |
| Schafer et al. 2019 | 115 | 117 | Alcohol and drug abuse/misuse | -0.249 | 0.023 | 0.022 | 0.150 | 0.097 | 0 | Some concerns |
| Schafer et al. 2019 | 111 | 117 | Alcohol and drug abuse/misuse | -0.080 | 0.023 | 0.023 | 0.152 | 0.600 | 0 | Some concerns |
| Somers et al. 2017 | 90 | 100 | Social functioning (degree of impairment) | 0.252 | 0.034 | 0.034 | 0.184 | 0.172 | 0 | Low |
| Somers et al. 2017 | 90 | 100 | Social functioning (degree of impairment) | 0.661 | 0.044 | 0.043 | 0.208 | 0.002 | 0 | Low |
| Somers et al. 2017 | 90 | 100 | Alcohol and drug abuse/misuse | -0.143 | 0.041 | 0.041 | 0.203 | 0.480 | 0 | Low |
| Somers et al. 2017 | 90 | 100 | Wellbeing and quality of life | 0.250 | 0.034 | 0.033 | 0.183 | 0.172 | 0 | Low |
| Tjaden et al. 2021 | 70 | 67 | Hope, empowerment & self-efficacy | 0.353 | 0.038 | 0.038 | 0.194 | 0.071 | 0 | Low |
| Tjaden et al. 2021 | 70 | 67 | Wellbeing and quality of life | 0.082 | 0.038 | 0.038 | 0.194 | 0.672 | 0 | Low |
| Tjaden et al. 2021 | 70 | 67 | Social functioning (degree of impairment) | -0.213 | 0.036 | 0.038 | 0.194 | 0.262 | 0 | Low |
| Tjaden et al. 2021 | 63 | 58 | Hope, empowerment & self-efficacy | 0.532 | 0.044 | 0.042 | 0.206 | 0.011 | 0 | Low |
| Tjaden et al. 2021 | 63 | 58 | Wellbeing and quality of life | -0.032 | 0.042 | 0.042 | 0.206 | 0.875 | 0 | Low |
| Tjaden et al. 2021 | 63 | 58 | Social functioning (degree of impairment) | 0.008 | 0.041 | 0.042 | 0.206 | 0.970 | 0 | Low |
| Valiente et al. 2022 | 52 | 61 | Wellbeing and quality of life | 0.150 | 0.048 | 0.047 | 0.218 | 0.492 | 0 | Low |
| Valiente et al. 2022 | 52 | 61 | Wellbeing and quality of life | 0.104 | 0.048 | 0.047 | 0.218 | 0.632 | 0 | Low |
| Valiente et al. 2022 | 52 | 61 | Wellbeing and quality of life | 0.138 | 0.048 | 0.047 | 0.218 | 0.526 | 0 | Low |
| Valiente et al. 2022 | 52 | 61 | Wellbeing and quality of life | 0.325 | 0.048 | 0.047 | 0.218 | 0.137 | 0 | Low |
| Valiente et al. 2022 | 52 | 61 | Wellbeing and quality of life | 0.136 | 0.048 | 0.047 | 0.218 | 0.534 | 0 | Low |
| Valiente et al. 2022 | 52 | 61 | Wellbeing and quality of life | 0.028 | 0.047 | 0.047 | 0.218 | 0.897 | 0 | Low |
| Valiente et al. 2022 | 52 | 61 | Wellbeing and quality of life | -0.172 | 0.048 | 0.047 | 0.218 | 0.430 | 0 | Low |
| Volpe et al. 2015 | 21 | 20 | Social functioning (degree of impairment) | 0.092 | 0.126 | 0.126 | 0.355 | 0.795 | 1 | Some concerns |
| Volpe et al. 2015 | 21 | 20 | Social functioning (degree of impairment) | 1.355 | 0.150 | 0.126 | 0.355 | 0.000 | 1 | Some concerns |
| Wojtalik et al. 2022 | 26 | 23 | Social functioning (degree of impairment) | 0.105 | 0.089 | 0.089 | 0.299 | 0.725 | 0 | Low |
| Smith et al. 2021 | 27 | 35 | Loneliness | 0.679 | 0.093 | 0.089 | 0.298 | 0.026 | 1 | High |
| Wuthrich & Rapee 2013 | 27 | 35 | Wellbeing and quality of life | 0.511 | 0.091 | 0.089 | 0.298 | 0.090 | 0 | Some concerns |
A general overview of the main data, we use for analyses of mental health outcomes can be found the scroll box below.
Show the code
mental_health_dat <-
gb_dat |>
filter(outcome_construct == "Mental health outcome")
saveRDS(mental_health_dat, file = "mental_health_dat.rds")
mental_overview_dat <-
mental_health_dat |>
select(
study, eppi_id, esid, N_t, N_c, N_total, inv_sample_size, gt_pop, vgt_pop, Wgt_pop, gt, vgt, Wgt, Wse,
prereg_chr, conventional, analysis_plan, Overall, D5, D7, timing
)
mental_overview_dat |>
mutate(
p_val = 2 * ( 1 - pnorm( abs(gt_pop) / sqrt(vgt_pop) ) )
) |>
select(
`Authors (year)` = study, N_t, N_c,
`Outcome construct` = analysis_plan, gt_pop, vgt_pop, Wgt, Wse, p_val,
`No protocol` = conventional, `Overall RoB` = Overall
) |>
kable(digits=3) |>
kable_styling(
bootstrap_options = c("striped", "hover"),
font_size = 10
) |>
scroll_box(width = "100%", height = "300px", fixed_thead = TRUE)| Authors (year) | N_t | N_c | Outcome construct | gt_pop | vgt_pop | Wgt | Wse | p_val | No protocol | Overall RoB |
|---|---|---|---|---|---|---|---|---|---|---|
| Acarturk et al. 2022 | 24 | 22 | General mental health | 0.534 | 0.087 | 0.084 | 0.289 | 0.070 | 0 | Some concerns |
| Acarturk et al. 2022 | 24 | 22 | General mental health | 0.257 | 0.093 | 0.092 | 0.303 | 0.398 | 0 | High |
| Acarturk et al. 2022 | 24 | 22 | General mental health | 0.559 | 0.135 | 0.131 | 0.362 | 0.128 | 0 | Some concerns |
| Acarturk et al. 2022 | 24 | 22 | General mental health | 0.339 | 0.134 | 0.133 | 0.364 | 0.354 | 0 | High |
| Baekkelund et al. 2022 | 29 | 30 | General mental health | 0.112 | 0.163 | 0.163 | 0.403 | 0.782 | 0 | Low |
| Baekkelund et al. 2022 | 29 | 30 | General mental health | 0.100 | 0.140 | 0.140 | 0.375 | 0.789 | 0 | Low |
| Cano-Vindel et al. 2021 | 315 | 316 | Anxiety | 0.906 | 0.004 | 0.003 | 0.054 | 0.000 | 0 | Low |
| Cano-Vindel et al. 2021 | 315 | 316 | Depression | 0.755 | 0.005 | 0.001 | 0.032 | 0.000 | 0 | Low |
| Cano-Vindel et al. 2021 | 315 | 316 | General mental health | 0.611 | 0.007 | 0.007 | 0.083 | 0.000 | 0 | Low |
| Cano-Vindel et al. 2021 | 273 | 238 | Anxiety | 0.493 | 0.004 | 0.004 | 0.059 | 0.000 | 0 | Low |
| Cano-Vindel et al. 2021 | 273 | 238 | Depression | 0.434 | 0.002 | 0.001 | 0.035 | 0.000 | 0 | Low |
| Cano-Vindel et al. 2021 | 273 | 238 | General mental health | 0.467 | 0.009 | 0.008 | 0.091 | 0.000 | 0 | Low |
| Cano-Vindel et al. 2021 | 229 | 204 | Anxiety | 0.552 | 0.005 | 0.004 | 0.065 | 0.000 | 0 | Low |
| Cano-Vindel et al. 2021 | 229 | 204 | Depression | 0.466 | 0.003 | 0.001 | 0.038 | 0.000 | 0 | Low |
| Cano-Vindel et al. 2021 | 229 | 204 | General mental health | 0.459 | 0.010 | 0.010 | 0.099 | 0.000 | 0 | Low |
| Cano-Vindel et al. 2021 | 208 | 180 | Anxiety | 0.580 | 0.005 | 0.005 | 0.068 | 0.000 | 0 | Low |
| Cano-Vindel et al. 2021 | 208 | 180 | Depression | 0.450 | 0.003 | 0.002 | 0.040 | 0.000 | 0 | Low |
| Cano-Vindel et al. 2021 | 208 | 180 | General mental health | 0.551 | 0.011 | 0.011 | 0.105 | 0.000 | 0 | Low |
| Craigie & Nathan 2009 | 157 | 77 | Depression | -0.498 | 0.025 | 0.022 | 0.150 | 0.002 | 1 | Serious |
| Craigie & Nathan 2009 | 157 | 77 | Anxiety | -0.549 | 0.022 | 0.021 | 0.145 | 0.000 | 1 | Serious |
| Crawford et al. 2012 | 121 | 121 | Symptoms of psychosis | 0.155 | 0.040 | 0.040 | 0.200 | 0.439 | 0 | Low |
| Crawford et al. 2012 | 119 | 121 | Symptoms of psychosis | 0.007 | 0.040 | 0.040 | 0.201 | 0.974 | 0 | Low |
| Crawford et al. 2012 | 121 | 117 | Symptoms of psychosis | 0.152 | 0.040 | 0.040 | 0.200 | 0.446 | 0 | Low |
| Crawford et al. 2012 | 117 | 117 | Symptoms of psychosis | 0.024 | 0.041 | 0.041 | 0.203 | 0.905 | 0 | Low |
| Dyck et al. 2000 | 21 | 21 | Symptoms of psychosis | 0.145 | 0.005 | 0.004 | 0.066 | 0.032 | 1 | Some concerns |
| Gestel-Timmermans et al. 2012 | 134 | 116 | General mental health | 0.184 | 0.014 | 0.014 | 0.120 | 0.127 | 0 | High |
| Gestel-Timmermans et al. 2012 | 121 | 100 | General mental health | 0.076 | 0.016 | 0.016 | 0.125 | 0.545 | 0 | High |
| Gatz et al. 2007 | 136 | 177 | General mental health | -0.052 | 0.011 | 0.011 | 0.103 | 0.616 | 1 | Serious |
| Gatz et al. 2007 | 136 | 177 | General mental health | -0.216 | 0.016 | 0.016 | 0.126 | 0.087 | 1 | Serious |
| Gonzalez & Prihoda 2007 | 8 | 9 | General mental health | 0.596 | 0.205 | 0.193 | 0.439 | 0.188 | 1 | Serious |
| Gordon et al. 2018 | 21 | 15 | General mental health | 0.066 | 0.141 | 0.141 | 0.375 | 0.861 | 1 | Some concerns |
| Gutman et al. 2019 | 10 | 10 | General mental health | 1.140 | 0.070 | 0.034 | 0.184 | 0.000 | 1 | Serious |
| Hagen et al. 2005 | 15 | 17 | General mental health | 0.407 | 0.169 | 0.166 | 0.408 | 0.323 | 1 | High |
| Hagen et al. 2005 | 15 | 17 | Anxiety | 0.521 | 0.171 | 0.166 | 0.408 | 0.208 | 1 | High |
| Hagen et al. 2005 | 15 | 15 | Depression | 0.355 | 0.169 | 0.173 | 0.416 | 0.387 | 1 | High |
| Halperin et al. 2000 | 7 | 9 | General mental health | 0.696 | 0.113 | 0.096 | 0.310 | 0.039 | 1 | High |
| Halperin et al. 2000 | 7 | 9 | Depression | 2.100 | 0.301 | 0.144 | 0.379 | 0.000 | 1 | High |
| Halperin et al. 2000 | 7 | 9 | General mental health | 0.772 | 0.105 | 0.083 | 0.289 | 0.017 | 1 | High |
| Haslam et al. 2019 | 66 | 54 | Depression | -0.033 | 0.000 | 0.000 | 0.021 | 0.109 | 0 | High |
| Haslam et al. 2019 | 66 | 54 | General mental health | -0.478 | 0.025 | 0.024 | 0.155 | 0.002 | 0 | High |
| Hilden et al. 2021 | 23 | 12 | General mental health | -0.337 | 0.142 | 0.140 | 0.375 | 0.371 | 0 | High |
| Hilden et al. 2021 | 23 | 12 | Anxiety | -0.202 | 0.141 | 0.140 | 0.375 | 0.591 | 0 | High |
| Himle et al. 2014 | 29 | 29 | General mental health | 0.597 | 0.086 | 0.083 | 0.288 | 0.042 | 0 | Some concerns |
| Himle et al. 2014 | 29 | 29 | General mental health | 0.385 | 0.084 | 0.083 | 0.288 | 0.184 | 0 | Some concerns |
| Himle et al. 2014 | 29 | 29 | General mental health | 0.379 | 0.084 | 0.083 | 0.288 | 0.191 | 0 | Some concerns |
| Himle et al. 2014 | 29 | 29 | Anxiety | 0.564 | 0.086 | 0.083 | 0.288 | 0.054 | 0 | Some concerns |
| Himle et al. 2014 | 29 | 29 | General mental health | 0.628 | 0.086 | 0.083 | 0.288 | 0.033 | 0 | Some concerns |
| Himle et al. 2014 | 29 | 29 | General mental health | 0.729 | 0.088 | 0.083 | 0.288 | 0.014 | 0 | Some concerns |
| Himle et al. 2014 | 29 | 29 | General mental health | 0.827 | 0.089 | 0.083 | 0.288 | 0.006 | 0 | Some concerns |
| Himle et al. 2014 | 29 | 29 | Anxiety | 0.297 | 0.084 | 0.083 | 0.288 | 0.304 | 0 | Some concerns |
| Jacob et al. 2010 | 19 | 24 | Depression | 0.482 | 0.114 | 0.116 | 0.341 | 0.152 | 1 | Serious |
| Jacob et al. 2010 | 19 | 24 | Depression | 0.379 | 0.113 | 0.116 | 0.341 | 0.260 | 1 | Serious |
| James et al. 2004 | 29 | 29 | General mental health | 0.783 | 0.088 | 0.083 | 0.288 | 0.008 | 1 | Some concerns |
| James et al. 2004 | 31 | 29 | General mental health | 0.465 | 0.081 | 0.079 | 0.282 | 0.103 | 1 | Some concerns |
| Kanie et al. 2019 | 32 | 29 | General mental health | 0.037 | 0.078 | 0.078 | 0.279 | 0.893 | 0 | Low |
| Kanie et al. 2019 | 32 | 29 | Symptoms of psychosis | -0.041 | 0.078 | 0.078 | 0.279 | 0.882 | 0 | Low |
| Lim et al. 2020 | 18 | 21 | Symptoms of psychosis | 0.667 | 0.143 | 0.137 | 0.371 | 0.078 | 1 | Serious |
| Lim et al. 2020 | 18 | 21 | Symptoms of psychosis | -0.084 | 0.137 | 0.137 | 0.371 | 0.821 | 1 | Serious |
| Lim et al. 2020 | 18 | 21 | Symptoms of psychosis | 0.695 | 0.144 | 0.137 | 0.371 | 0.067 | 1 | Serious |
| Lim et al. 2020 | 18 | 21 | Symptoms of psychosis | -0.644 | 0.143 | 0.137 | 0.371 | 0.089 | 1 | Serious |
| Lim et al. 2020 | 18 | 21 | Symptoms of psychosis | 0.574 | 0.142 | 0.137 | 0.371 | 0.128 | 1 | Serious |
| Lloyd-Evans et al. 2020 | 25 | 10 | Anxiety | 0.501 | 0.162 | 0.158 | 0.398 | 0.213 | 0 | Low |
| Lloyd-Evans et al. 2020 | 25 | 10 | Depression | 0.456 | 0.157 | 0.158 | 0.398 | 0.250 | 0 | Low |
| Madigan et al. 2013 | 42 | 22 | General mental health | 0.000 | 0.081 | 0.081 | 0.285 | 1.000 | 1 | Some concerns |
| Madigan et al. 2013 | 40 | 20 | Symptoms of psychosis | -0.122 | 0.088 | 0.088 | 0.296 | 0.680 | 1 | Some concerns |
| Madigan et al. 2013 | 40 | 20 | Depression | 0.065 | 0.088 | 0.088 | 0.296 | 0.827 | 1 | Some concerns |
| Madigan et al. 2013 | 32 | 17 | General mental health | -0.024 | 0.106 | 0.106 | 0.326 | 0.942 | 1 | Some concerns |
| Madigan et al. 2013 | 32 | 19 | Symptoms of psychosis | 0.156 | 0.101 | 0.100 | 0.317 | 0.623 | 1 | Some concerns |
| Madigan et al. 2013 | 33 | 11 | Depression | 0.022 | 0.133 | 0.133 | 0.365 | 0.952 | 1 | Some concerns |
| McCay et al. 2006 | 26 | 14 | Symptoms of psychosis | 0.171 | 0.115 | 0.114 | 0.338 | 0.613 | 1 | Serious |
| McCay et al. 2006 | 26 | 14 | Symptoms of psychosis | 0.633 | 0.169 | 0.164 | 0.405 | 0.124 | 1 | Serious |
| Michalak et al. 2015 | 36 | 35 | Depression | 0.253 | 0.068 | 0.067 | 0.260 | 0.332 | 0 | Some concerns |
| Michalak et al. 2015 | 36 | 35 | Depression | 0.577 | 0.066 | 0.067 | 0.260 | 0.025 | 0 | Some concerns |
| Michalak et al. 2015 | 35 | 35 | Depression | 0.830 | 0.074 | 0.069 | 0.262 | 0.002 | 0 | Some concerns |
| Michalak et al. 2015 | 35 | 35 | Depression | 0.526 | 0.067 | 0.069 | 0.262 | 0.042 | 0 | Some concerns |
| Morley et al. 2014 | 122 | 63 | General mental health | -0.475 | 0.028 | 0.027 | 0.166 | 0.005 | 1 | Some concerns |
| Morley et al. 2014 | 122 | 63 | Depression | 0.021 | 0.027 | 0.027 | 0.166 | 0.898 | 1 | Some concerns |
| Morley et al. 2014 | 122 | 63 | Anxiety | -0.205 | 0.028 | 0.027 | 0.166 | 0.216 | 1 | Some concerns |
| Morton et al. 2012 | 21 | 20 | General mental health | 0.758 | 0.103 | 0.096 | 0.309 | 0.018 | 1 | Some concerns |
| Morton et al. 2012 | 21 | 20 | General mental health | 0.554 | 0.052 | 0.048 | 0.219 | 0.015 | 1 | Some concerns |
| Morton et al. 2012 | 21 | 20 | General mental health | 0.280 | 0.049 | 0.048 | 0.219 | 0.205 | 1 | Some concerns |
| Morton et al. 2012 | 21 | 20 | General mental health | 0.481 | 0.051 | 0.048 | 0.219 | 0.033 | 1 | Some concerns |
| Patterson et al. 2003 | 16 | 16 | Symptoms of psychosis | 0.451 | 0.166 | 0.162 | 0.403 | 0.269 | 1 | Some concerns |
| Patterson et al. 2003 | 16 | 16 | Symptoms of psychosis | 0.962 | 0.178 | 0.162 | 0.403 | 0.023 | 1 | Some concerns |
| Patterson et al. 2003 | 16 | 16 | Symptoms of psychosis | 0.449 | 0.166 | 0.162 | 0.403 | 0.270 | 1 | Some concerns |
| Patterson et al. 2003 | 16 | 16 | Depression | 0.625 | 0.169 | 0.162 | 0.403 | 0.128 | 1 | Some concerns |
| Patterson et al. 2003 | 16 | 16 | Symptoms of psychosis | 0.558 | 0.168 | 0.162 | 0.403 | 0.173 | 1 | Some concerns |
| Patterson et al. 2003 | 16 | 16 | Symptoms of psychosis | 0.874 | 0.176 | 0.162 | 0.403 | 0.037 | 1 | Some concerns |
| Patterson et al. 2003 | 16 | 16 | Symptoms of psychosis | 0.563 | 0.168 | 0.162 | 0.403 | 0.170 | 1 | Some concerns |
| Patterson et al. 2003 | 16 | 16 | Depression | 0.739 | 0.172 | 0.162 | 0.403 | 0.075 | 1 | Some concerns |
| Popolo et al. 2019 | 8 | 10 | General mental health | 0.421 | 0.329 | 0.324 | 0.569 | 0.464 | 1 | Some concerns |
| Popolo et al. 2019 | 8 | 10 | General mental health | 0.876 | 0.269 | 0.245 | 0.495 | 0.091 | 1 | Some concerns |
| Rabenstein et al. 2016 | 153 | 148 | General mental health | -0.367 | 0.018 | 0.018 | 0.135 | 0.007 | 1 | Moderate |
| Rabenstein et al. 2016 | 153 | 148 | Depression | -0.421 | 0.017 | 0.017 | 0.132 | 0.001 | 1 | Moderate |
| Rusch et al. 2019 | 18 | 17 | Depression | 0.648 | 0.092 | 0.086 | 0.293 | 0.033 | 0 | Some concerns |
| Rusch et al. 2019 | 20 | 13 | Depression | 0.366 | 0.183 | 0.181 | 0.425 | 0.392 | 0 | Some concerns |
| Sacks et al. 2011 | 38 | 38 | Depression | -0.048 | 0.066 | 0.068 | 0.262 | 0.852 | 1 | Some concerns |
| Sacks et al. 2011 | 38 | 38 | General mental health | -0.064 | 0.068 | 0.068 | 0.262 | 0.806 | 1 | Some concerns |
| Sajatovic et al. 2009 | 63 | 65 | Depression | 0.234 | 0.039 | 0.039 | 0.198 | 0.239 | 1 | Some concerns |
| Sajatovic et al. 2009 | 63 | 65 | General mental health | 0.302 | 0.040 | 0.039 | 0.198 | 0.130 | 1 | Some concerns |
| Sajatovic et al. 2009 | 51 | 55 | Depression | 0.212 | 0.048 | 0.048 | 0.218 | 0.334 | 1 | Some concerns |
| Sajatovic et al. 2009 | 51 | 55 | General mental health | 0.104 | 0.048 | 0.048 | 0.218 | 0.635 | 1 | Some concerns |
| Sajatovic et al. 2009 | 41 | 39 | Depression | 0.108 | 0.062 | 0.062 | 0.249 | 0.665 | 1 | Some concerns |
| Sajatovic et al. 2009 | 41 | 39 | General mental health | 0.189 | 0.062 | 0.062 | 0.249 | 0.448 | 1 | Some concerns |
| Saloheimo et al. 2016 | 27 | 34 | Depression | 0.482 | 0.075 | 0.073 | 0.269 | 0.078 | 0 | Some concerns |
| Schrank et al. 2016 | 43 | 41 | General mental health | 0.151 | 0.062 | 0.061 | 0.248 | 0.542 | 0 | Low |
| Schafer et al. 2019 | 115 | 117 | Depression | 0.081 | 0.022 | 0.022 | 0.150 | 0.584 | 0 | Some concerns |
| Schafer et al. 2019 | 111 | 117 | Depression | 0.162 | 0.022 | 0.023 | 0.152 | 0.280 | 0 | Some concerns |
| Schafer et al. 2019 | 115 | 117 | Depression | 0.210 | 0.022 | 0.022 | 0.150 | 0.155 | 0 | Some concerns |
| Schafer et al. 2019 | 111 | 117 | Depression | 0.186 | 0.022 | 0.023 | 0.152 | 0.214 | 0 | Some concerns |
| Schafer et al. 2019 | 115 | 117 | Depression | 0.032 | 0.022 | 0.022 | 0.150 | 0.827 | 0 | Some concerns |
| Schafer et al. 2019 | 111 | 117 | Depression | 0.283 | 0.022 | 0.023 | 0.152 | 0.059 | 0 | Some concerns |
| Schafer et al. 2019 | 115 | 117 | General mental health | 0.137 | 0.023 | 0.022 | 0.150 | 0.360 | 0 | Some concerns |
| Schafer et al. 2019 | 111 | 117 | General mental health | 0.103 | 0.023 | 0.023 | 0.152 | 0.497 | 0 | Some concerns |
| Schafer et al. 2019 | 115 | 117 | General mental health | 0.296 | 0.023 | 0.022 | 0.150 | 0.049 | 0 | Some concerns |
| Schafer et al. 2019 | 111 | 117 | General mental health | 0.182 | 0.023 | 0.023 | 0.152 | 0.230 | 0 | Some concerns |
| Schafer et al. 2019 | 115 | 117 | General mental health | 0.080 | 0.022 | 0.022 | 0.150 | 0.595 | 0 | Some concerns |
| Schafer et al. 2019 | 111 | 117 | General mental health | 0.102 | 0.023 | 0.023 | 0.152 | 0.500 | 0 | Some concerns |
| Schafer et al. 2019 | 115 | 117 | General mental health | -0.050 | 0.022 | 0.022 | 0.150 | 0.739 | 0 | Some concerns |
| Schafer et al. 2019 | 111 | 117 | General mental health | -0.089 | 0.023 | 0.023 | 0.152 | 0.558 | 0 | Some concerns |
| Schafer et al. 2019 | 115 | 117 | General mental health | 0.190 | 0.023 | 0.022 | 0.150 | 0.205 | 0 | Some concerns |
| Schafer et al. 2019 | 111 | 117 | General mental health | -0.110 | 0.023 | 0.023 | 0.152 | 0.469 | 0 | Some concerns |
| Schafer et al. 2019 | 115 | 117 | General mental health | 0.035 | 0.022 | 0.022 | 0.150 | 0.816 | 0 | Some concerns |
| Schafer et al. 2019 | 111 | 117 | General mental health | -0.026 | 0.023 | 0.023 | 0.152 | 0.866 | 0 | Some concerns |
| Somers et al. 2017 | 90 | 100 | General mental health | -0.142 | 0.034 | 0.033 | 0.183 | 0.437 | 0 | Low |
| Tjaden et al. 2021 | 70 | 67 | General mental health | -0.046 | 0.038 | 0.038 | 0.194 | 0.812 | 0 | Low |
| Tjaden et al. 2021 | 63 | 58 | General mental health | -0.061 | 0.043 | 0.042 | 0.206 | 0.767 | 0 | Low |
| Valiente et al. 2022 | 52 | 61 | General mental health | 0.046 | 0.047 | 0.047 | 0.218 | 0.832 | 0 | Low |
| Valiente et al. 2022 | 52 | 61 | General mental health | 0.021 | 0.047 | 0.047 | 0.218 | 0.923 | 0 | Low |
| Valiente et al. 2022 | 52 | 61 | General mental health | 0.000 | 0.047 | 0.047 | 0.218 | 1.000 | 0 | Low |
| Valiente et al. 2022 | 52 | 61 | General mental health | 0.153 | 0.048 | 0.047 | 0.218 | 0.482 | 0 | Low |
| Valiente et al. 2022 | 52 | 61 | General mental health | -0.131 | 0.048 | 0.047 | 0.218 | 0.547 | 0 | Low |
| Valiente et al. 2022 | 52 | 61 | General mental health | 0.025 | 0.047 | 0.047 | 0.218 | 0.909 | 0 | Low |
| Valiente et al. 2022 | 52 | 61 | General mental health | -0.043 | 0.047 | 0.047 | 0.218 | 0.844 | 0 | Low |
| Valiente et al. 2022 | 52 | 61 | General mental health | 0.033 | 0.047 | 0.047 | 0.218 | 0.881 | 0 | Low |
| Valiente et al. 2022 | 52 | 61 | General mental health | 0.157 | 0.048 | 0.047 | 0.218 | 0.470 | 0 | Low |
| Volpe et al. 2015 | 21 | 20 | General mental health | 0.213 | 0.127 | 0.126 | 0.355 | 0.549 | 1 | Some concerns |
| Volpe et al. 2015 | 21 | 20 | Depression | 0.125 | 0.124 | 0.126 | 0.355 | 0.723 | 1 | Some concerns |
| Wojtalik et al. 2022 | 26 | 23 | General mental health | 0.084 | 0.022 | 0.021 | 0.147 | 0.566 | 0 | Low |
| Wuthrich & Rapee 2013 | 27 | 35 | Anxiety | 1.654 | 0.113 | 0.089 | 0.298 | 0.000 | 0 | Some concerns |
| Smith et al. 2021 | 27 | 35 | Anxiety | 1.346 | 0.105 | 0.089 | 0.298 | 0.000 | 1 | Some concerns |
| Smith et al. 2021 | 27 | 35 | Depression | 1.801 | 0.119 | 0.089 | 0.298 | 0.000 | 1 | Some concerns |
| Wuthrich & Rapee 2013 | 27 | 35 | Depression | 0.811 | 0.095 | 0.089 | 0.298 | 0.008 | 0 | Some concerns |
| Wuthrich & Rapee 2013 | 27 | 35 | Anxiety | 0.462 | 0.091 | 0.089 | 0.298 | 0.125 | 0 | Some concerns |
Risk of bias
In this section, we present the main risk og bias (RoB) visualizations.
Note that in plots where the number of studies appears on the x-axis, some bars differ in length. This occurs because a single study contribute multiple effect size estimates that received different RoB assessments.
RoB2
Show the code
rho <- 0.8
V_mat <- metafor::vcalc(vi = vgt_pop, cluster = study, obs = esid, data = reintegration_dat, rho = rho)
rma_res <-
metafor::rma.mv(
gt_pop,
V = V_mat,
random = ~ 1 | study / esid,
data = reintegration_dat
)
tau2 <- rma_res$sigma2[1]
omega2<- rma_res$sigma2[2]
reint_rob2_dat <-
reintegration_dat |>
mutate(
kj = n(),
sigma2j = mean(vgt_pop),
weight = 1 / (kj*tau2 + omega2 + (kj-1)*rho*sigma2j + sigma2j),
.by = study
) |>
filter(rob_tool == "RoB2") |>
select(
prereg = prereg_chr, study, D1:D5, Overall, weight
)
rob_sum <-
reint_rob2_dat |>
pivot_longer(D1:Overall, names_to = "Category", values_to = "Rating") |>
mutate(
Category = factor(
Category, levels = c(paste0("D", 1:5), "Overall"),
labels = c(
"Bias arising from the randomization process",
"Bias due to deviations from intended interventions",
"Bias due to missing outcome data",
"Bias in measurement of the outcome",
"Bias in selection of the reported result",
"Overall risk of bias"
)
),
Rating = case_when(str_detect(Rating, "Some") ~ "Some concerns", .default = Rating),
Rating = factor(Rating, levels = c("Low", "Some concerns", "High"))
) |>
group_by(prereg, Category, Rating, study) |>
summarize(
effects = n(),
weight = sum(weight),
.groups = "drop_last"
) |>
summarise(
studies = length(unique(study)),
effects = sum(effects),
weight = sum(weight),
.groups = "drop_last"
) |>
mutate(
effects_pct = 100 * effects / sum(effects),
studies_pct = 100 * studies / sum(studies),
effects_pct_w = weight/sum(weight) * 100,
studies_w = studies * weight,
studies_pct_w = studies_w / sum(studies_w) * 100
) |>
ungroup()
# Mental health
V_mat_mental <- metafor::vcalc(vi = vgt_pop, cluster = study, obs = esid, data = mental_health_dat, rho = rho)
rma_res_mental <-
metafor::rma.mv(
gt_pop,
V = V_mat_mental,
random = ~ 1 | study / esid,
data = mental_health_dat
)
tau2_mental <- rma_res_mental$sigma2[1]
omega2_mental <- rma_res_mental$sigma2[2]
mental_rob2_dat <-
mental_health_dat |>
mutate(
kj = n(),
sigma2j = mean(vgt_pop),
weight = 1 / (kj*tau2_mental + omega2_mental + (kj-1)*rho*sigma2j + sigma2j),
.by = study
) |>
filter(rob_tool == "RoB2") |>
select(
prereg = prereg_chr, study, D1:D5, Overall, weight
)
rob_sum_mental <-
mental_rob2_dat |>
pivot_longer(D1:Overall, names_to = "Category", values_to = "Rating") |>
mutate(
Category = factor(
Category, levels = c(paste0("D", 1:5), "Overall"),
labels = c(
"Bias arising from the randomization process",
"Bias due to deviations from intended interventions",
"Bias due to missing outcome data",
"Bias in measurement of the outcome",
"Bias in selection of the reported result",
"Overall risk of bias"
)
),
Rating = case_when(str_detect(Rating, "Some") ~ "Some concerns", .default = Rating),
Rating = factor(Rating, levels = c("Low", "Some concerns", "High"))
) |>
group_by(prereg, Category, Rating, study) |>
summarize(
effects = n(),
weight = sum(weight),
.groups = "drop_last"
) |>
summarise(
studies = length(unique(study)),
effects = sum(effects),
weight = sum(weight),
.groups = "drop_last"
) |>
mutate(
effects_pct = 100 * effects / sum(effects),
studies_pct = 100 * studies / sum(studies),
effects_pct_w = weight/sum(weight) * 100,
studies_w = studies * weight,
studies_pct_w = studies_w / sum(studies_w) * 100
) |>
ungroup() Overall (Not preregistered vs. preregistered)
Show the code
rob_pct_studies <-
rob_sum |>
mutate(
Rating = fct_rev(Rating),
level = "Study-level"
) |>
ggplot(aes(x = studies, y = Category, fill = Rating)) +
geom_col(alpha = 0.9) +
facet_grid(level ~ prereg, scales = "free_x") +
scale_fill_manual(
values = c("Low" = "mediumaquamarine", "Some concerns" = "lightgoldenrodyellow", "High" = "lightcoral")
) +
scale_y_discrete(
limits = rev,
labels = c(
expression(bold("Overall risk of bias")),
"Bias in selection of the reported result",
"Bias in measurement of the outcome",
"Bias due to missing outcome data",
"Bias due to deviations from intended interventions",
"Bias arising from the randomization process"
)
) +
labs(
y = "",
x = "Number of studies",
fill = "Risk of Bias"
) +
guides(fill = guide_legend(reverse = TRUE)) +
theme_bw() +
theme(
legend.position = "none",
strip.text.x = element_text(size = 14),
strip.text.y = element_text(size = 14),
axis.title = element_text(size = 14),
axis.text = element_text(size = 14),
legend.text = element_text(size = 14),
legend.title = element_text(size = 14)
) +
facetted_pos_scales(
x = list(
prereg == "Not preregistered" ~ scale_x_continuous(breaks = seq(0, 16, 2)
)
)
)
rob_pct_effects <-
rob_sum |>
mutate(
Rating = fct_rev(Rating),
level = "Outcome-level"
) |>
ggplot(aes(x = effects, y = Category, fill = Rating)) +
geom_col(alpha = 0.9) +
facet_grid(level ~ prereg, scales = "free_x") +
scale_fill_manual(
values = c("Low" = "mediumaquamarine", "Some concerns" = "lightgoldenrodyellow", "High" = "lightcoral")
) +
scale_y_discrete(
limits = rev,
labels = c(
expression(bold("Overall risk of bias")),
"Bias in selection of the reported result",
"Bias in measurement of the outcome",
"Bias due to missing outcome data",
"Bias due to deviations from intended interventions",
"Bias arising from the randomization process"
)
) +
labs(
x = "Number of effects",
y = "",
fill = "Risk of Bias"
) +
guides(fill = guide_legend(reverse = TRUE)) +
theme_bw() +
theme(
legend.position = "bottom",
strip.text.x = element_blank(),
strip.text.y = element_text(size = 14),
axis.title = element_text(size = 14),
axis.text = element_text(size = 14),
legend.text = element_text(size = 14),
legend.title = element_text(size = 14)
) +
facetted_pos_scales(
x = list(
prereg == "Preregistered" ~ scale_x_continuous(breaks = seq(0, 150, 25)
)
)
)
#png(filename = "Figures/rob2_reint.png", width = 12, height = 7, units = "in", res = 600)
rob_pct_studies / rob_pct_effects
#dev.off()Show the code
rob_pct_studies_weight <-
rob_sum |>
mutate(
Rating = fct_rev(Rating),
level = "Studies"
) |>
ggplot(aes(x = studies_pct_w, y = Category, fill = Rating)) +
geom_col(alpha = 0.9) +
facet_grid(level ~ prereg, scales = "free_x") +
scale_fill_manual(
values = c("Low" = "mediumaquamarine", "Some concerns" = "lightgoldenrodyellow", "High" = "lightcoral")
) +
scale_y_discrete(
limits = rev,
labels = c(
expression(bold("Overall risk of bias")),
"Bias in selection of the reported result",
"Bias in measurement of the outcome",
"Bias due to missing outcome data",
"Bias due to deviations from intended interventions",
"Bias arising from the randomization process"
)
) +
labs(
y = "",
fill = "Risk of Bias"
) +
guides(fill = guide_legend(reverse = TRUE)) +
theme_bw() +
theme(
legend.position = "none",
axis.title.x=element_blank()
)
rob_pct_effects_weight <-
rob_sum |>
mutate(
Rating = fct_rev(Rating),
level = "Effects"
) |>
ggplot(aes(x = effects_pct_w, y = Category, fill = Rating)) +
geom_col(alpha = 0.9) +
facet_grid(level ~ prereg, scales = "free_x") +
scale_fill_manual(
values = c("Low" = "mediumaquamarine", "Some concerns" = "lightgoldenrodyellow", "High" = "lightcoral")
) +
scale_y_discrete(
limits = rev,
labels = c(
expression(bold("Overall risk of bias")),
"Bias in selection of the reported result",
"Bias in measurement of the outcome",
"Bias due to missing outcome data",
"Bias due to deviations from intended interventions",
"Bias arising from the randomization process"
)
) +
labs(
x = "Weighted percentage",
y = "",
fill = "Risk of Bias"
) +
guides(fill = guide_legend(reverse = TRUE)) +
theme_bw() +
theme(
legend.position = "bottom",
strip.text.x = element_blank()
)
rob_pct_studies_weight / rob_pct_effects_weightShow the code
rob_pct_studies_unweight <-
rob_sum |>
mutate(
Rating = fct_rev(Rating),
level = "Studies"
) |>
ggplot(aes(x = studies_pct, y = Category, fill = Rating)) +
geom_col(alpha = 0.9) +
facet_grid(level ~ prereg, scales = "free_x") +
scale_fill_manual(
values = c("Low" = "mediumaquamarine", "Some concerns" = "lightgoldenrodyellow", "High" = "lightcoral")
) +
scale_y_discrete(
limits = rev,
labels = c(
expression(bold("Overall risk of bias")),
"Bias in selection of the reported result",
"Bias in measurement of the outcome",
"Bias due to missing outcome data",
"Bias due to deviations from intended interventions",
"Bias arising from the randomization process"
)
) +
labs(
y = "",
fill = "Risk of Bias"
) +
guides(fill = guide_legend(reverse = TRUE)) +
theme_bw() +
theme(
legend.position = "none",
axis.title.x=element_blank()
)
rob_pct_effects_unweight <-
rob_sum |>
mutate(
Rating = fct_rev(Rating),
level = "Effects"
) |>
ggplot(aes(x = effects_pct, y = Category, fill = Rating)) +
geom_col(alpha = 0.9) +
facet_grid(level ~ prereg, scales = "free_x") +
scale_fill_manual(
values = c("Low" = "mediumaquamarine", "Some concerns" = "lightgoldenrodyellow", "High" = "lightcoral")
) +
scale_y_discrete(
limits = rev,
labels = c(
expression(bold("Overall risk of bias")),
"Bias in selection of the reported result",
"Bias in measurement of the outcome",
"Bias due to missing outcome data",
"Bias due to deviations from intended interventions",
"Bias arising from the randomization process"
)
) +
labs(
x = "Percentage",
y = "",
fill = "Risk of Bias"
) +
guides(fill = guide_legend(reverse = TRUE)) +
theme_bw() +
theme(
legend.position = "bottom",
strip.text.x = element_blank()
)
rob_pct_studies_unweight / rob_pct_effects_unweightShow the code
rob_pct_studies_mental <-
rob_sum_mental |>
mutate(
Rating = fct_rev(Rating),
level = "Study-level"
) |>
ggplot(aes(x = studies, y = Category, fill = Rating)) +
geom_col(alpha = 0.9) +
facet_grid(level ~ prereg, scales = "free_x") +
scale_fill_manual(
values = c("Low" = "mediumaquamarine", "Some concerns" = "lightgoldenrodyellow", "High" = "lightcoral")
) +
scale_y_discrete(
limits = rev,
labels = c(
expression(bold("Overall risk of bias")),
"Bias in selection of the reported result",
"Bias in measurement of the outcome",
"Bias due to missing outcome data",
"Bias due to deviations from intended interventions",
"Bias arising from the randomization process"
)
) +
labs(
y = "",
x = "Number of studies",
fill = "Risk of Bias"
) +
guides(fill = guide_legend(reverse = TRUE)) +
theme_bw() +
theme(
legend.position = "none",
strip.text.x = element_text(size = 14),
strip.text.y = element_text(size = 14),
axis.title = element_text(size = 14),
axis.text = element_text(size = 14),
legend.text = element_text(size = 14),
legend.title = element_text(size = 14)
) +
facetted_pos_scales(
x = list(
prereg == "Not preregistered" ~ scale_x_continuous(breaks = seq(0, 16, 2)
)
)
)
rob_pct_effects_mental <-
rob_sum_mental |>
mutate(
Rating = fct_rev(Rating),
level = "Outcome-level"
) |>
ggplot(aes(x = effects, y = Category, fill = Rating)) +
geom_col(alpha = 0.9) +
facet_grid(level ~ prereg, scales = "free_x") +
scale_fill_manual(
values = c("Low" = "mediumaquamarine", "Some concerns" = "lightgoldenrodyellow", "High" = "lightcoral")
) +
scale_y_discrete(
limits = rev,
labels = c(
expression(bold("Overall risk of bias")),
"Bias in selection of the reported result",
"Bias in measurement of the outcome",
"Bias due to missing outcome data",
"Bias due to deviations from intended interventions",
"Bias arising from the randomization process"
)
) +
labs(
x = "Number of effects",
y = "",
fill = "Risk of Bias"
) +
guides(fill = guide_legend(reverse = TRUE)) +
theme_bw() +
theme(
legend.position = "bottom",
strip.text.x = element_blank(),
strip.text.y = element_text(size = 14),
axis.title = element_text(size = 14),
axis.text = element_text(size = 14),
legend.text = element_text(size = 14),
legend.title = element_text(size = 14)
)
#png(filename = "Figures/rob2_mental.png", width = 12, height = 7, units = "in", res = 600)
rob_pct_studies_mental / rob_pct_effects_mental
#dev.off()Show the code
rob_pct_studies_weight_mental <-
rob_sum_mental |>
mutate(
Rating = fct_rev(Rating),
level = "Studies"
) |>
ggplot(aes(x = studies_pct_w, y = Category, fill = Rating)) +
geom_col(alpha = 0.9) +
facet_grid(level ~ prereg, scales = "free_x") +
scale_fill_manual(
values = c("Low" = "mediumaquamarine", "Some concerns" = "lightgoldenrodyellow", "High" = "lightcoral")
) +
scale_y_discrete(
limits = rev,
labels = c(
expression(bold("Overall risk of bias")),
"Bias in selection of the reported result",
"Bias in measurement of the outcome",
"Bias due to missing outcome data",
"Bias due to deviations from intended interventions",
"Bias arising from the randomization process"
)
) +
labs(
y = "",
fill = "Risk of Bias"
) +
guides(fill = guide_legend(reverse = TRUE)) +
theme_bw() +
theme(
legend.position = "none",
axis.title.x=element_blank()
)
rob_pct_effects_weight_mental <-
rob_sum_mental |>
mutate(
Rating = fct_rev(Rating),
level = "Effects"
) |>
ggplot(aes(x = effects_pct_w, y = Category, fill = Rating)) +
geom_col(alpha = 0.9) +
facet_grid(level ~ prereg, scales = "free_x") +
scale_fill_manual(
values = c("Low" = "mediumaquamarine", "Some concerns" = "lightgoldenrodyellow", "High" = "lightcoral")
) +
scale_y_discrete(
limits = rev,
labels = c(
expression(bold("Overall risk of bias")),
"Bias in selection of the reported result",
"Bias in measurement of the outcome",
"Bias due to missing outcome data",
"Bias due to deviations from intended interventions",
"Bias arising from the randomization process"
)
) +
labs(
x = "Weighted percentage",
y = "",
fill = "Risk of Bias"
) +
guides(fill = guide_legend(reverse = TRUE)) +
theme_bw() +
theme(
legend.position = "bottom",
strip.text.x = element_blank()
)
rob_pct_studies_weight_mental / rob_pct_effects_weight_mentalShow the code
rob_pct_studies_unweight_mental <-
rob_sum_mental |>
mutate(
Rating = fct_rev(Rating),
level = "Studies"
) |>
ggplot(aes(x = studies_pct, y = Category, fill = Rating)) +
geom_col(alpha = 0.9) +
facet_grid(level ~ prereg, scales = "free_x") +
scale_fill_manual(
values = c("Low" = "mediumaquamarine", "Some concerns" = "lightgoldenrodyellow", "High" = "lightcoral")
) +
scale_y_discrete(
limits = rev,
labels = c(
expression(bold("Overall risk of bias")),
"Bias in selection of the reported result",
"Bias in measurement of the outcome",
"Bias due to missing outcome data",
"Bias due to deviations from intended interventions",
"Bias arising from the randomization process"
)
) +
labs(
y = "",
fill = "Risk of Bias"
) +
guides(fill = guide_legend(reverse = TRUE)) +
theme_bw() +
theme(
legend.position = "none",
axis.title.x=element_blank()
)
rob_pct_effects_unweight <-
rob_sum_mental |>
mutate(
Rating = fct_rev(Rating),
level = "Effects"
) |>
ggplot(aes(x = effects_pct, y = Category, fill = Rating)) +
geom_col(alpha = 0.9) +
facet_grid(level ~ prereg, scales = "free_x") +
scale_fill_manual(
values = c("Low" = "mediumaquamarine", "Some concerns" = "lightgoldenrodyellow", "High" = "lightcoral")
) +
scale_y_discrete(
limits = rev,
labels = c(
expression(bold("Overall risk of bias")),
"Bias in selection of the reported result",
"Bias in measurement of the outcome",
"Bias due to missing outcome data",
"Bias due to deviations from intended interventions",
"Bias arising from the randomization process"
)
) +
labs(
x = "Percentage",
y = "",
fill = "Risk of Bias"
) +
guides(fill = guide_legend(reverse = TRUE)) +
theme_bw() +
theme(
legend.position = "bottom",
strip.text.x = element_blank()
)
rob_pct_studies_unweight / rob_pct_effects_unweightSubgrouped risk of bias plots
Show the code
reint_rob2_subgrp_dat <-
reintegration_dat |>
mutate(
kj = n(),
sigma2j = mean(vgt_pop),
weight = 1 / (kj*tau2 + omega2 + (kj-1)*rho*sigma2j + sigma2j),
.by = study
) |>
filter(rob_tool == "RoB2" & str_detect(analysis_plan, "Alco|Well|Hope|Social")) |>
select(
outcome = analysis_plan, prereg = prereg_chr, study, D1:D5, Overall, weight
) |>
mutate(
outcome = case_match(
outcome,
"Alcohol and drug abuse/misuse" ~ "Alcohol/drugs",
"Hope, empowerment & self-efficacy" ~ "Hope/empower",
"Social functioning (degree of impairment)" ~ "Social function",
"Wellbeing and quality of life" ~ "Wellbeing/QoL"
)
)
rob_sum_subgrp <-
reint_rob2_subgrp_dat |>
pivot_longer(D1:Overall, names_to = "Category", values_to = "Rating") |>
mutate(
Category = factor(
Category, levels = c(paste0("D", 1:5), "Overall"),
labels = c(
"Bias arising from the randomization process",
"Bias due to deviations from intended interventions",
"Bias due to missing outcome data",
"Bias in measurement of the outcome",
"Bias in selection of the reported result",
"Overall risk of bias"
)
),
Rating = case_when(str_detect(Rating, "Some") ~ "Some concerns", .default = Rating),
Rating = factor(Rating, levels = c("Low", "Some concerns", "High"))
) |>
group_by(prereg, outcome, Category, Rating, study) |>
summarize(
effects = n(),
weight = sum(weight),
.groups = "drop_last"
) |>
summarise(
studies = length(unique(study)),
effects = sum(effects),
weight = sum(weight),
.groups = "drop_last"
) |>
mutate(
effects_pct = 100 * effects / sum(effects),
studies_pct = 100 * studies / sum(studies),
effects_pct_w = weight/sum(weight) * 100,
studies_w = studies * weight,
studies_pct_w = studies_w / sum(studies_w) * 100
) |>
ungroup()
# Mental health
mental_rob2_subgrp_dat <-
mental_health_dat |>
mutate(
kj = n(),
sigma2j = mean(vgt_pop),
weight = 1 / (kj*tau2 + omega2 + (kj-1)*rho*sigma2j + sigma2j),
.by = study
) |>
filter(rob_tool == "RoB2") |>
select(
outcome = analysis_plan, prereg = prereg_chr, study, D1:D5, Overall, weight
) |>
mutate(
outcome = factor(
outcome,
levels = c("Anxiety", "Depression", "General mental health", "Symptoms of psychosis")
)
)
rob_sum_subgrp_mental <-
mental_rob2_subgrp_dat |>
pivot_longer(D1:Overall, names_to = "Category", values_to = "Rating") |>
mutate(
Category = factor(
Category, levels = c(paste0("D", 1:5), "Overall"),
labels = c(
"Bias arising from the randomization process",
"Bias due to deviations from intended interventions",
"Bias due to missing outcome data",
"Bias in measurement of the outcome",
"Bias in selection of the reported result",
"Overall risk of bias"
)
),
Rating = case_when(str_detect(Rating, "Some") ~ "Some concerns", .default = Rating),
Rating = factor(Rating, levels = c("Low", "Some concerns", "High"))
) |>
group_by(prereg, outcome, Category, Rating, study) |>
summarize(
effects = n(),
weight = sum(weight),
.groups = "drop_last"
) |>
summarise(
studies = length(unique(study)),
effects = sum(effects),
weight = sum(weight),
.groups = "drop_last"
) |>
mutate(
effects_pct = 100 * effects / sum(effects),
studies_pct = 100 * studies / sum(studies),
effects_pct_w = weight/sum(weight) * 100,
studies_w = studies * weight,
studies_pct_w = studies_w / sum(studies_w) * 100
) |>
ungroup() Show the code
rob_studies_subgrp <-
rob_sum_subgrp |>
mutate(
Rating = fct_rev(Rating),
level = "Studies"
) |>
ggplot(aes(x = studies, y = Category, fill = Rating)) +
geom_col(alpha = 0.9) +
facet_nested_wrap(outcome ~ prereg, scales = "free_x", ncol = 2) +
scale_fill_manual(
values = c("Low" = "mediumaquamarine", "Some concerns" = "lightgoldenrodyellow", "High" = "lightcoral")
) +
scale_y_discrete(
limits = rev,
labels = c(
expression(bold("Overall risk of bias")),
"Bias in selection of the reported result",
"Bias in measurement of the outcome",
"Bias due to missing outcome data",
"Bias due to deviations from intended interventions",
"Bias arising from the randomization process"
)
) +
labs(
y = "",
x = "Number of studies",
fill = "Risk of Bias"
) +
guides(fill = guide_legend(reverse = TRUE)) +
theme_bw() +
theme(
legend.position = "bottom"
) +
facetted_pos_scales(
x = list(
prereg == "Not preregistered" & outcome == "Alcohol/drugs" ~ scale_x_continuous(breaks = seq(0, 2, 1)),
prereg == "Preregistered" & outcome == "Wellbeing/QoL" ~ scale_x_continuous(breaks = seq(0, 14, 2)),
prereg == "Preregistered" & outcome == "Social function" ~ scale_x_continuous(breaks = seq(0, 10, 2))
)
)
rob_studies_subgrpShow the code
# Weigthed percent
rob_weight_pct_studies_subgrp <-
rob_sum_subgrp |>
mutate(
Rating = fct_rev(Rating),
level = "Studies"
) |>
ggplot(aes(x = studies_pct_w, y = Category, fill = Rating)) +
geom_col(alpha = 0.9) +
facet_grid2(outcome ~ prereg, scales = "free_x") +
scale_fill_manual(
values = c("Low" = "mediumaquamarine", "Some concerns" = "lightgoldenrodyellow", "High" = "lightcoral")
) +
scale_y_discrete(
limits = rev,
labels = c(
expression(bold("Overall risk of bias")),
"Bias in selection of the reported result",
"Bias in measurement of the outcome",
"Bias due to missing outcome data",
"Bias due to deviations from intended interventions",
"Bias arising from the randomization process"
)
) +
labs(
y = "",
x = "Weighted percentage of studies",
fill = "Risk of Bias"
) +
guides(fill = guide_legend(reverse = TRUE)) +
theme_bw() +
theme(
legend.position = "bottom"
)
rob_weight_pct_studies_subgrpShow the code
# unweigthed percent
rob_unweight_pct_studies_subgrp <-
rob_sum_subgrp |>
mutate(
Rating = fct_rev(Rating),
level = "Studies"
) |>
ggplot(aes(x = studies_pct, y = Category, fill = Rating)) +
geom_col(alpha = 0.9) +
facet_grid2(outcome ~ prereg, scales = "free_x") +
scale_fill_manual(
values = c("Low" = "mediumaquamarine", "Some concerns" = "lightgoldenrodyellow", "High" = "lightcoral")
) +
scale_y_discrete(
limits = rev,
labels = c(
expression(bold("Overall risk of bias")),
"Bias in selection of the reported result",
"Bias in measurement of the outcome",
"Bias due to missing outcome data",
"Bias due to deviations from intended interventions",
"Bias arising from the randomization process"
)
) +
labs(
y = "",
x = "Percentage of studies",
fill = "Risk of Bias"
) +
guides(fill = guide_legend(reverse = TRUE)) +
theme_bw() +
theme(
legend.position = "bottom"
)
rob_unweight_pct_studies_subgrpShow the code
rob_effects_subgrp <-
rob_sum_subgrp |>
mutate(
Rating = fct_rev(Rating),
level = "Effects"
) |>
ggplot(aes(x = effects, y = Category, fill = Rating)) +
geom_col(alpha = 0.9) +
facet_nested_wrap(outcome ~ prereg, scales = "free_x", ncol = 2) +
scale_fill_manual(
values = c("Low" = "mediumaquamarine", "Some concerns" = "lightgoldenrodyellow", "High" = "lightcoral")
) +
scale_y_discrete(
limits = rev,
labels = c(
expression(bold("Overall risk of bias")),
"Bias in selection of the reported result",
"Bias in measurement of the outcome",
"Bias due to missing outcome data",
"Bias due to deviations from intended interventions",
"Bias arising from the randomization process"
)
) +
labs(
y = "",
x = "Number of effects",
fill = "Risk of Bias"
) +
guides(fill = guide_legend(reverse = TRUE)) +
theme_bw() +
theme(
legend.position = "bottom"
) +
facetted_pos_scales(
x = list(
prereg == "Not preregistered" & outcome == "Hope/empower" ~ scale_x_continuous(breaks = seq(0, 12, 2)),
prereg == "Preregistered" & outcome == "Hope/empower" ~ scale_x_continuous(breaks = seq(0, 20, 5)),
prereg == "Not preregistered" & outcome == "Social function" ~ scale_x_continuous(breaks = seq(0, 10, 2)),
prereg == "Preregistered" & outcome == "Social function" ~ scale_x_continuous(breaks = seq(0, 40, 10)),
prereg == "Not preregistered" & outcome == "Wellbeing/QoL" ~ scale_x_continuous(breaks = seq(0, 10, 2))
)
)
rob_effects_subgrpShow the code
# Weigthed percent
rob_weight_pct_effects_subgrp <-
rob_sum_subgrp |>
mutate(
Rating = fct_rev(Rating),
level = "Effects"
) |>
ggplot(aes(x = effects_pct_w, y = Category, fill = Rating)) +
geom_col(alpha = 0.9) +
facet_grid2(outcome ~ prereg, scales = "free_x") +
scale_fill_manual(
values = c("Low" = "mediumaquamarine", "Some concerns" = "lightgoldenrodyellow", "High" = "lightcoral")
) +
scale_y_discrete(
limits = rev,
labels = c(
expression(bold("Overall risk of bias")),
"Bias in selection of the reported result",
"Bias in measurement of the outcome",
"Bias due to missing outcome data",
"Bias due to deviations from intended interventions",
"Bias arising from the randomization process"
)
) +
labs(
y = "",
x = "Weighted percentage of effects",
fill = "Risk of Bias"
) +
guides(fill = guide_legend(reverse = TRUE)) +
theme_bw() +
theme(
legend.position = "bottom"
)
rob_weight_pct_effects_subgrpShow the code
# unweigthed percent
rob_unweight_pct_effects_subgrp <-
rob_sum_subgrp |>
mutate(
Rating = fct_rev(Rating),
level = "Studies"
) |>
ggplot(aes(x = effects_pct, y = Category, fill = Rating)) +
geom_col(alpha = 0.9) +
facet_grid2(outcome ~ prereg, scales = "free_x") +
scale_fill_manual(
values = c("Low" = "mediumaquamarine", "Some concerns" = "lightgoldenrodyellow", "High" = "lightcoral")
) +
scale_y_discrete(
limits = rev,
labels = c(
expression(bold("Overall risk of bias")),
"Bias in selection of the reported result",
"Bias in measurement of the outcome",
"Bias due to missing outcome data",
"Bias due to deviations from intended interventions",
"Bias arising from the randomization process"
)
) +
labs(
y = "",
x = "Percentage of effects",
fill = "Risk of Bias"
) +
guides(fill = guide_legend(reverse = TRUE)) +
theme_bw() +
theme(
legend.position = "bottom"
)
rob_unweight_pct_effects_subgrpShow the code
rob_studies_subgrp_mental <-
rob_sum_subgrp_mental |>
mutate(
Rating = fct_rev(Rating),
level = "Studies"
) |>
ggplot(aes(x = studies, y = Category, fill = Rating)) +
geom_col(alpha = 0.9) +
facet_nested_wrap(outcome ~ prereg, scales = "free_x", ncol = 2) +
scale_fill_manual(
values = c("Low" = "mediumaquamarine", "Some concerns" = "lightgoldenrodyellow", "High" = "lightcoral")
) +
scale_y_discrete(
limits = rev,
labels = c(
expression(bold("Overall risk of bias")),
"Bias in selection of the reported result",
"Bias in measurement of the outcome",
"Bias due to missing outcome data",
"Bias due to deviations from intended interventions",
"Bias arising from the randomization process"
)
) +
labs(
y = "",
x = "Number of studies",
fill = "Risk of Bias"
) +
guides(fill = guide_legend(reverse = TRUE)) +
theme_bw() +
theme(
legend.position = "bottom"
) +
facetted_pos_scales(
x = list(
prereg == "Not preregistered" & outcome == "Anxiety" ~ scale_x_continuous(breaks = seq(0, 2, 1)),
prereg == "Preregistered" & outcome == "Depression" ~ scale_x_continuous(breaks = seq(0, 10, 2)),
prereg == "Not preregistered" & outcome == "General mental health" ~ scale_x_continuous(breaks = seq(0, 10, 2)),
prereg == "Preregistered" & outcome == "Symptoms of psychosis" ~ scale_x_continuous(breaks = seq(0, 2, 1))
)
)
rob_studies_subgrp_mentalShow the code
# Weigthed percent
rob_weight_pct_studies_subgrp_mental <-
rob_sum_subgrp_mental |>
mutate(
Rating = fct_rev(Rating),
level = "Studies"
) |>
ggplot(aes(x = studies_pct_w, y = Category, fill = Rating)) +
geom_col(alpha = 0.9) +
facet_grid2(outcome ~ prereg, scales = "free_x") +
scale_fill_manual(
values = c("Low" = "mediumaquamarine", "Some concerns" = "lightgoldenrodyellow", "High" = "lightcoral")
) +
scale_y_discrete(
limits = rev,
labels = c(
expression(bold("Overall risk of bias")),
"Bias in selection of the reported result",
"Bias in measurement of the outcome",
"Bias due to missing outcome data",
"Bias due to deviations from intended interventions",
"Bias arising from the randomization process"
)
) +
labs(
y = "",
x = "Weighted percentage of studies",
fill = "Risk of Bias"
) +
guides(fill = guide_legend(reverse = TRUE)) +
theme_bw() +
theme(
legend.position = "bottom"
)
rob_weight_pct_studies_subgrp_mentalShow the code
# unweigthed percent
rob_unweight_pct_studies_subgrp_mental <-
rob_sum_subgrp_mental |>
mutate(
Rating = fct_rev(Rating),
level = "Studies"
) |>
ggplot(aes(x = studies_pct, y = Category, fill = Rating)) +
geom_col(alpha = 0.9) +
facet_grid2(outcome ~ prereg, scales = "free_x") +
scale_fill_manual(
values = c("Low" = "mediumaquamarine", "Some concerns" = "lightgoldenrodyellow", "High" = "lightcoral")
) +
scale_y_discrete(
limits = rev,
labels = c(
expression(bold("Overall risk of bias")),
"Bias in selection of the reported result",
"Bias in measurement of the outcome",
"Bias due to missing outcome data",
"Bias due to deviations from intended interventions",
"Bias arising from the randomization process"
)
) +
labs(
y = "",
x = "Percentage of studies",
fill = "Risk of Bias"
) +
guides(fill = guide_legend(reverse = TRUE)) +
theme_bw() +
theme(
legend.position = "bottom"
)
rob_unweight_pct_studies_subgrp_mentalShow the code
rob_effects_subgrp_mental <-
rob_sum_subgrp_mental |>
mutate(
Rating = fct_rev(Rating),
level = "Effects"
) |>
ggplot(aes(x = effects, y = Category, fill = Rating)) +
geom_col(alpha = 0.9) +
facet_nested_wrap(outcome ~ prereg, scales = "free_x", ncol = 2) +
scale_fill_manual(
values = c("Low" = "mediumaquamarine", "Some concerns" = "lightgoldenrodyellow", "High" = "lightcoral")
) +
scale_y_discrete(
limits = rev,
labels = c(
expression(bold("Overall risk of bias")),
"Bias in selection of the reported result",
"Bias in measurement of the outcome",
"Bias due to missing outcome data",
"Bias due to deviations from intended interventions",
"Bias arising from the randomization process"
)
) +
labs(
y = "",
x = "Number of effects",
fill = "Risk of Bias"
) +
guides(fill = guide_legend(reverse = TRUE)) +
theme_bw() +
theme(
legend.position = "bottom"
) +
facetted_pos_scales(
x = list(
prereg == "Not preregistered" & outcome == "Anxiety" ~ scale_x_continuous(breaks = seq(0, 2, 1)),
prereg == "Preregistered" & outcome == "Anxiety" ~ scale_x_continuous(breaks = seq(0, 10, 2)),
prereg == "Not preregistered" & outcome == "Depression" ~ scale_x_continuous(breaks = seq(0, 10, 2)),
prereg == "Not preregistered" & outcome == "Symptoms of psychosis" ~ scale_x_continuous(breaks = seq(0, 10, 2))
)
)
rob_effects_subgrp_mentalShow the code
# Weigthed percent
rob_weight_pct_effects_subgrp_mental <-
rob_sum_subgrp_mental |>
mutate(
Rating = fct_rev(Rating),
level = "Effects"
) |>
ggplot(aes(x = effects_pct_w, y = Category, fill = Rating)) +
geom_col(alpha = 0.9) +
facet_grid2(outcome ~ prereg, scales = "free_x") +
scale_fill_manual(
values = c("Low" = "mediumaquamarine", "Some concerns" = "lightgoldenrodyellow", "High" = "lightcoral")
) +
scale_y_discrete(
limits = rev,
labels = c(
expression(bold("Overall risk of bias")),
"Bias in selection of the reported result",
"Bias in measurement of the outcome",
"Bias due to missing outcome data",
"Bias due to deviations from intended interventions",
"Bias arising from the randomization process"
)
) +
labs(
y = "",
x = "Weighted percentage of effects",
fill = "Risk of Bias"
) +
guides(fill = guide_legend(reverse = TRUE)) +
theme_bw() +
theme(
legend.position = "bottom"
)
rob_weight_pct_effects_subgrp_mentalShow the code
# unweigthed percent
rob_unweight_pct_effects_subgrp_mental <-
rob_sum_subgrp_mental |>
mutate(
Rating = fct_rev(Rating),
level = "Studies"
) |>
ggplot(aes(x = effects_pct, y = Category, fill = Rating)) +
geom_col(alpha = 0.9) +
facet_grid2(outcome ~ prereg, scales = "free_x") +
scale_fill_manual(
values = c("Low" = "mediumaquamarine", "Some concerns" = "lightgoldenrodyellow", "High" = "lightcoral")
) +
scale_y_discrete(
limits = rev,
labels = c(
expression(bold("Overall risk of bias")),
"Bias in selection of the reported result",
"Bias in measurement of the outcome",
"Bias due to missing outcome data",
"Bias due to deviations from intended interventions",
"Bias arising from the randomization process"
)
) +
labs(
y = "",
x = "Percentage of effects",
fill = "Risk of Bias"
) +
guides(fill = guide_legend(reverse = TRUE)) +
theme_bw() +
theme(
legend.position = "bottom"
)
rob_unweight_pct_effects_subgrp_mentalROBINS-I
Show the code
reint_robinsi_dat <-
reintegration_dat |>
mutate(
kj = n(),
sigma2j = mean(vgt_pop),
weight = 1 / (kj*tau2 + omega2 + (kj-1)*rho*sigma2j + sigma2j),
.by = study
) |>
filter(rob_tool == "ROBINS-I") |>
select(
prereg = prereg_chr, study, D1:Overall, weight
)
robinsi_sum <-
reint_robinsi_dat |>
pivot_longer(D1:Overall, names_to = "Category", values_to = "Rating") |>
mutate(
Category = factor(
Category, levels = c(paste0("D", 1:7), "Overall"),
labels = c(
"Bias due to confounding",
"Bias due to selection of participants",
"Bias in classification of interventions",
"Bias due to deviations from intended interventions",
"Bias due to missing data",
"Bias in measurement of outcomes",
"Bias in selection of the reported result",
"Overall risk of bias"
)
),
Rating = factor(Rating, levels = c("Low", "Moderate", "Serious"))
) |>
group_by(Category, Rating, study) |>
summarize(
effects = n(),
weight = sum(weight),
.groups = "drop_last"
) |>
summarise(
studies = length(unique(study)),
effects = sum(effects),
weight = sum(weight),
.groups = "drop_last"
) |>
mutate(
effects_pct = 100 * effects / sum(effects),
studies_pct = 100 * studies / sum(studies),
effects_pct_w = weight/sum(weight) * 100,
studies_w = studies * weight,
studies_pct_w = studies_w / sum(studies_w) * 100
) |>
ungroup()
# Mental health
mental_robinsi_dat <-
mental_health_dat |>
mutate(
kj = n(),
sigma2j = mean(vgt_pop),
weight = 1 / (kj*tau2 + omega2 + (kj-1)*rho*sigma2j + sigma2j),
.by = study
) |>
filter(rob_tool == "ROBINS-I") |>
select(
prereg = prereg_chr, study, D1:Overall, weight
)
robinsi_sum_mental <-
mental_robinsi_dat |>
pivot_longer(D1:Overall, names_to = "Category", values_to = "Rating") |>
mutate(
Category = factor(
Category, levels = c(paste0("D", 1:7), "Overall"),
labels = c(
"Bias due to confounding",
"Bias due to selection of participants",
"Bias in classification of interventions",
"Bias due to deviations from intended interventions",
"Bias due to missing data",
"Bias in measurement of outcomes",
"Bias in selection of the reported result",
"Overall risk of bias"
)
),
Rating = factor(Rating, levels = c("Low", "Moderate", "Serious"))
) |>
group_by(Category, Rating, study) |>
summarize(
effects = n(),
weight = sum(weight),
.groups = "drop_last"
) |>
summarise(
studies = length(unique(study)),
effects = sum(effects),
weight = sum(weight),
.groups = "drop_last"
) |>
mutate(
effects_pct = 100 * effects / sum(effects),
studies_pct = 100 * studies / sum(studies),
effects_pct_w = weight/sum(weight) * 100,
studies_w = studies * weight,
studies_pct_w = studies_w / sum(studies_w) * 100
) |>
ungroup() Show the code
robin_studies <-
robinsi_sum |>
mutate(
Rating = fct_rev(Rating),
level = "Studies"
) |>
ggplot(aes(x = studies, y = Category, fill = Rating)) +
geom_col(alpha = 0.9) +
facet_grid(~ level, scales = "free_x") +
scale_fill_manual(
values = c("Low" = "mediumaquamarine", "Moderate" = "lightgoldenrodyellow", "Serious" = "lightcoral")
) +
scale_y_discrete(
limits = rev,
labels = c(
expression(bold("Overall risk of bias")),
"Bias in selection of the reported result",
"Bias in measurement of outcomes",
"Bias due to missing data",
"Bias due to deviations from intended interventions",
"Bias in classification of interventions",
"Bias due to selection of participants",
"Bias due to confounding"
)
) +
labs(
y = "",
x = "Raw number",
fill = "Risk of Bias"
) +
guides(fill = guide_legend(reverse = TRUE)) +
theme_bw() +
theme(
legend.position = "bottom",
strip.text.x = element_text(size = 14),
strip.text.y = element_text(size = 14),
axis.title = element_text(size = 14),
axis.text = element_text(size = 14),
legend.text = element_text(size = 14),
legend.title = element_text(size = 14)
)
robin_effects <-
robinsi_sum |>
mutate(
Rating = fct_rev(Rating),
level = "Effects"
) |>
ggplot(aes(x = effects, y = Category, fill = Rating)) +
geom_col(alpha = 0.9) +
facet_grid(~ level, scales = "free_x") +
scale_fill_manual(
values = c("Low" = "mediumaquamarine", "Moderate" = "lightgoldenrodyellow", "Serious" = "lightcoral")
) +
scale_y_discrete(
limits = rev,
labels = c(
expression(bold("Overall risk of bias")),
"Bias in selection of the reported result",
"Bias in measurement of outcomes",
"Bias due to missing data",
"Bias due to deviations from intended interventions",
"Bias in classification of interventions",
"Bias due to selection of participants",
"Bias due to confounding"
)
) +
labs(
y = "",
x = "Raw number",
fill = "Risk of Bias"
) +
guides(fill = guide_legend(reverse = TRUE)) +
theme_bw() +
theme(
legend.position = "bottom",
axis.ticks.y = element_blank(),
axis.text.y = element_blank(),
strip.text.x = element_text(size = 14),
axis.title = element_text(size = 14),
axis.text = element_text(size = 14),
legend.text = element_text(size = 14),
legend.title = element_text(size = 14)
)
#png(filename = "Figures/ROBINSI_reint.png", width = 12, height = 5, units = "in", res = 600)
(robin_studies + robin_effects) +
plot_layout(guides = "collect", axis_titles = "collect") & theme(legend.position = 'bottom')
#dev.off()Show the code
robin_pct_studies_weight <-
robinsi_sum |>
mutate(
Rating = fct_rev(Rating),
level = "Studies"
) |>
ggplot(aes(x = studies_pct_w, y = Category, fill = Rating)) +
geom_col(alpha = 0.9) +
facet_grid(~ level, scales = "free_x") +
scale_fill_manual(
values = c("Low" = "mediumaquamarine", "Moderate" = "lightgoldenrodyellow", "Serious" = "lightcoral")
) +
scale_y_discrete(
limits = rev,
labels = c(
expression(bold("Overall risk of bias")),
"Bias in selection of the reported result",
"Bias in measurement of outcomes",
"Bias due to missing data",
"Bias due to deviations from intended interventions",
"Bias in classification of interventions",
"Bias due to selection of participants",
"Bias due to confounding"
)
) +
labs(
y = "",
x = "Weighted percentage",
fill = "Risk of Bias"
) +
guides(fill = guide_legend(reverse = TRUE)) +
theme_bw() +
theme(
legend.position = "bottom"
)
robin_pct_effects_weight <-
robinsi_sum |>
mutate(
Rating = fct_rev(Rating),
level = "% Effects"
) |>
ggplot(aes(x = effects_pct_w, y = Category, fill = Rating)) +
geom_col(alpha = 0.9) +
facet_grid(~ level, scales = "free_x") +
scale_fill_manual(
values = c("Low" = "mediumaquamarine", "Moderate" = "lightgoldenrodyellow", "Serious" = "lightcoral")
) +
scale_y_discrete(
limits = rev,
labels = c(
expression(bold("Overall risk of bias")),
"Bias in selection of the reported result",
"Bias in measurement of outcomes",
"Bias due to missing data",
"Bias due to deviations from intended interventions",
"Bias in classification of interventions",
"Bias due to selection of participants",
"Bias due to confounding"
)
) +
labs(
y = "",
x = "Weighted percentage",
fill = "Risk of Bias"
) +
guides(fill = guide_legend(reverse = TRUE)) +
theme_bw() +
theme(
legend.position = "bottom",
axis.ticks.y = element_blank(),
axis.text.y = element_blank()
)
(robin_pct_studies_weight + robin_pct_effects_weight) +
plot_layout(guides = "collect", axis_titles = "collect") & theme(legend.position = 'bottom') Show the code
robin_pct_studies_unweight <-
robinsi_sum |>
mutate(
Rating = fct_rev(Rating),
level = "Studies"
) |>
ggplot(aes(x = studies_pct, y = Category, fill = Rating)) +
geom_col(alpha = 0.9) +
facet_grid(~ level, scales = "free_x") +
scale_fill_manual(
values = c("Low" = "mediumaquamarine", "Moderate" = "lightgoldenrodyellow", "Serious" = "lightcoral")
) +
scale_y_discrete(
limits = rev,
labels = c(
expression(bold("Overall risk of bias")),
"Bias in selection of the reported result",
"Bias in measurement of outcomes",
"Bias due to missing data",
"Bias due to deviations from intended interventions",
"Bias in classification of interventions",
"Bias due to selection of participants",
"Bias due to confounding"
)
) +
labs(
y = "",
x = "Percentage",
fill = "Risk of Bias"
) +
guides(fill = guide_legend(reverse = TRUE)) +
theme_bw() +
theme(
legend.position = "bottom"
)
robin_pct_effects_unweight <-
robinsi_sum |>
mutate(
Rating = fct_rev(Rating),
level = "Effects"
) |>
ggplot(aes(x = effects_pct, y = Category, fill = Rating)) +
geom_col(alpha = 0.9) +
facet_grid(~ level, scales = "free_x") +
scale_fill_manual(
values = c("Low" = "mediumaquamarine", "Moderate" = "lightgoldenrodyellow", "Serious" = "lightcoral")
) +
scale_y_discrete(
limits = rev,
labels = c(
expression(bold("Overall risk of bias")),
"Bias in selection of the reported result",
"Bias in measurement of outcomes",
"Bias due to missing data",
"Bias due to deviations from intended interventions",
"Bias in classification of interventions",
"Bias due to selection of participants",
"Bias due to confounding"
)
) +
labs(
y = "",
x = "Percentage",
fill = "Risk of Bias"
) +
guides(fill = guide_legend(reverse = TRUE)) +
theme_bw() +
theme(
legend.position = "bottom",
axis.ticks.y = element_blank(),
axis.text.y = element_blank()
)
(robin_pct_studies_unweight + robin_pct_effects_unweight) +
plot_layout(guides = "collect", axis_titles = "collect") & theme(legend.position = 'bottom') Show the code
robin_studies_mental <-
robinsi_sum_mental |>
mutate(
Rating = fct_rev(Rating),
level = "Studies"
) |>
ggplot(aes(x = studies, y = Category, fill = Rating)) +
geom_col(alpha = 0.9) +
facet_grid(~ level, scales = "free_x") +
scale_fill_manual(
values = c("Low" = "mediumaquamarine", "Moderate" = "lightgoldenrodyellow", "Serious" = "lightcoral")
) +
scale_y_discrete(
limits = rev,
labels = c(
expression(bold("Overall risk of bias")),
"Bias in selection of the reported result",
"Bias in measurement of outcomes",
"Bias due to missing data",
"Bias due to deviations from intended interventions",
"Bias in classification of interventions",
"Bias due to selection of participants",
"Bias due to confounding"
)
) +
labs(
y = "",
x = "Raw number",
fill = "Risk of Bias"
) +
guides(fill = guide_legend(reverse = TRUE)) +
theme_bw() +
theme(
legend.position = "bottom",
strip.text.y = element_blank(),
strip.text.x = element_text(size = 14),
axis.title = element_text(size = 14),
axis.text = element_text(size = 14),
legend.text = element_text(size = 14),
legend.title = element_text(size = 14)
)
robin_effects_mental <-
robinsi_sum_mental |>
mutate(
Rating = fct_rev(Rating),
level = "Effects"
) |>
ggplot(aes(x = effects, y = Category, fill = Rating)) +
geom_col(alpha = 0.9) +
facet_grid(~ level, scales = "free_x") +
scale_fill_manual(
values = c("Low" = "mediumaquamarine", "Moderate" = "lightgoldenrodyellow", "Serious" = "lightcoral")
) +
scale_y_discrete(
limits = rev,
labels = c(
expression(bold("Overall risk of bias")),
"Bias in selection of the reported result",
"Bias in measurement of outcomes",
"Bias due to missing data",
"Bias due to deviations from intended interventions",
"Bias in classification of interventions",
"Bias due to selection of participants",
"Bias due to confounding"
)
) +
labs(
y = "",
x = "Raw number",
fill = "Risk of Bias"
) +
guides(fill = guide_legend(reverse = TRUE)) +
theme_bw() +
theme(
legend.position = "bottom",
axis.ticks.y = element_blank(),
axis.text.y = element_blank(),
strip.text.x = element_text(size = 14),
axis.title = element_text(size = 14),
axis.text = element_text(size = 14),
legend.text = element_text(size = 14),
legend.title = element_text(size = 14)
)
#png(filename = "Figures/RONINSI_mental.png", width = 12, height = 5, units = "in", res = 600)
(robin_studies_mental + robin_effects_mental) +
plot_layout(guides = "collect", axis_titles = "collect") & theme(legend.position = 'bottom')
#dev.off()Show the code
robin_pct_studies_weight_mental <-
robinsi_sum_mental |>
mutate(
Rating = fct_rev(Rating),
level = "Studies"
) |>
ggplot(aes(x = studies_pct_w, y = Category, fill = Rating)) +
geom_col(alpha = 0.9) +
facet_grid(~ level, scales = "free_x") +
scale_fill_manual(
values = c("Low" = "mediumaquamarine", "Moderate" = "lightgoldenrodyellow", "Serious" = "lightcoral")
) +
scale_y_discrete(
limits = rev,
labels = c(
expression(bold("Overall risk of bias")),
"Bias in selection of the reported result",
"Bias in measurement of outcomes",
"Bias due to missing data",
"Bias due to deviations from intended interventions",
"Bias in classification of interventions",
"Bias due to selection of participants",
"Bias due to confounding"
)
) +
labs(
y = "",
x = "Weighted percentage",
fill = "Risk of Bias"
) +
guides(fill = guide_legend(reverse = TRUE)) +
theme_bw() +
theme(
legend.position = "bottom"
)
robin_pct_effects_weight_mental <-
robinsi_sum_mental |>
mutate(
Rating = fct_rev(Rating),
level = "Effects"
) |>
ggplot(aes(x = effects_pct_w, y = Category, fill = Rating)) +
geom_col(alpha = 0.9) +
facet_grid(~ level, scales = "free_x") +
scale_fill_manual(
values = c("Low" = "mediumaquamarine", "Moderate" = "lightgoldenrodyellow", "Serious" = "lightcoral")
) +
scale_y_discrete(
limits = rev,
labels = c(
expression(bold("Overall risk of bias")),
"Bias in selection of the reported result",
"Bias in measurement of outcomes",
"Bias due to missing data",
"Bias due to deviations from intended interventions",
"Bias in classification of interventions",
"Bias due to selection of participants",
"Bias due to confounding"
)
) +
labs(
y = "",
x = "Weighted percentage",
fill = "Risk of Bias"
) +
guides(fill = guide_legend(reverse = TRUE)) +
theme_bw() +
theme(
legend.position = "bottom",
axis.ticks.y = element_blank(),
axis.text.y = element_blank()
)
(robin_pct_studies_weight_mental + robin_pct_effects_weight_mental) +
plot_layout(guides = "collect", axis_titles = "collect") & theme(legend.position = 'bottom') Show the code
robin_pct_studies_unweight_mental <-
robinsi_sum_mental |>
mutate(
Rating = fct_rev(Rating),
level = "Studies"
) |>
ggplot(aes(x = studies_pct, y = Category, fill = Rating)) +
geom_col(alpha = 0.9) +
facet_grid(~ level, scales = "free_x") +
scale_fill_manual(
values = c("Low" = "mediumaquamarine", "Moderate" = "lightgoldenrodyellow", "Serious" = "lightcoral")
) +
scale_y_discrete(
limits = rev,
labels = c(
expression(bold("Overall risk of bias")),
"Bias in selection of the reported result",
"Bias in measurement of outcomes",
"Bias due to missing data",
"Bias due to deviations from intended interventions",
"Bias in classification of interventions",
"Bias due to selection of participants",
"Bias due to confounding"
)
) +
labs(
y = "",
x = "Percentage",
fill = "Risk of Bias"
) +
guides(fill = guide_legend(reverse = TRUE)) +
theme_bw() +
theme(
legend.position = "bottom"
)
robin_pct_effects_unweight_mental <-
robinsi_sum_mental |>
mutate(
Rating = fct_rev(Rating),
level = "Effects"
) |>
ggplot(aes(x = effects_pct, y = Category, fill = Rating)) +
geom_col(alpha = 0.9) +
facet_grid(~ level, scales = "free_x") +
scale_fill_manual(
values = c("Low" = "mediumaquamarine", "Moderate" = "lightgoldenrodyellow", "Serious" = "lightcoral")
) +
scale_y_discrete(
limits = rev,
labels = c(
expression(bold("Overall risk of bias")),
"Bias in selection of the reported result",
"Bias in measurement of outcomes",
"Bias due to missing data",
"Bias due to deviations from intended interventions",
"Bias in classification of interventions",
"Bias due to selection of participants",
"Bias due to confounding"
)
) +
labs(
y = "",
x = "Percentage",
fill = "Risk of Bias"
) +
guides(fill = guide_legend(reverse = TRUE)) +
theme_bw() +
theme(
legend.position = "bottom",
axis.ticks.y = element_blank(),
axis.text.y = element_blank()
)
(robin_pct_studies_unweight_mental + robin_pct_effects_unweight_mental) +
plot_layout(guides = "collect", axis_titles = "collect") & theme(legend.position = 'bottom') Descriptives and Dependence Structures
Timeline
Show the code
# Figure 1: Number of included studies in the meta-analysis by year
G_timeplot <-
group_based_dat |>
mutate(
prereg = if_else(
str_detect(protocol, regex("yes", ignore_case = TRUE)),
"Preregistered", "Not preregistered"
)
) |>
reframe(year = unique(year), prereg = unique(prereg), .by = study)
# DONE
timeline_plot <- ggplot(G_timeplot, aes(x = year, fill = prereg)) +
geom_bar(col = "black", alpha = 1, width = 1) +
scale_x_continuous(breaks = seq(2000, 2022, 1)) +
scale_y_continuous(breaks = seq(0, 6.5, 1), limits = c(0, 7), expand = c(0,0)) +
theme_bw() +
scale_fill_brewer(palette="Paired")+
theme(
axis.text.x = element_text(angle = 45, vjust = 1, hjust = 1),
#panel.border = element_blank(),
legend.position = "bottom",
legend.title = element_blank(),
panel.grid.minor = element_blank(),
panel.grid.major.x = element_blank(),
axis.line = element_line(colour = "black")
) +
labs(
x = "Year of publication",
y = "Number of studies",
)
timeline_plotNumber effects across effect size metrics
Show the code
# Number of studies reporting OR
group_based_dat |>
summarise(
n = n(),
.by = c(study, effect_size)
) |>
summarise(
N_studies = length(effect_size),
N_es = sum(n),
.by = effect_size
)# A tibble: 2 × 3
effect_size N_studies N_es
<chr> <int> <int>
1 SMD 49 394
2 OR 1 2
Average pre-posttest correlation
Reintegrational outcome
Show the code
reintegration_dat |>
filter(
str_detect(
ppcor_method, regex("Cal", ignore_case = TRUE),
) |
str_detect(
ppcor_method, regex("From study", ignore_case = TRUE),
)
) |>
select(contains("ppcor")) |>
pull(ppcor) |>
mean()[1] 0.6229602
Mental health
Show the code
mental_health_dat|>
filter(
str_detect(
ppcor_method, regex("Cal", ignore_case = TRUE),
) |
str_detect(
ppcor_method, regex("From study", ignore_case = TRUE),
)
) |>
select(contains("ppcor")) |>
pull(ppcor) |>
mean()[1] 0.5071045
Number of effect size estimates per study
Overall per study
Show the code
es_plot_per_study <-
gb_dat |>
arrange(desc(study)) |>
mutate(study = factor(study, unique(study))) |>
ggplot(aes(x = study)) +
geom_bar(aes(fill = outcome_construct)) +
scale_y_continuous(breaks = seq(5, 40, by = 5)) +
theme_minimal() +
theme(
legend.position = "bottom"
) +
coord_flip() +
labs(
x = paste0("Study (", n_distinct(gb_dat$study), " studies in total)"),
y = "Number of Effect Size Estimates",
fill = "Outcome construct"
) +
guides(fill = guide_legend(reverse=TRUE))
es_plot_per_studyAcross outcome subgroups per study
Show the code
reintegration_dat |>
ggplot(aes(y = study, fill = gt_pop >= 0)) +
geom_bar(data = subset(reintegration_dat, gt_pop >= 0), aes(x = after_stat(count)), stat = "count") +
geom_bar(data = subset(reintegration_dat, gt_pop < 0), aes(x = -after_stat(count)), stat = "count") +
theme_minimal() +
scale_x_continuous(labels = abs, breaks = scales::breaks_width(5), limits = c(-10, 30)) +
scale_y_discrete(limits=rev) +
scale_fill_manual(
values = c(met.brewer("Navajo")[2], met.brewer("Navajo")[4]),
labels = c("Negative ES", "Non-negative ES"),
name = "Effect Size"
) +
labs(x = "Number of Effect Size Estimates", y = "", title = "Reintegration") +
theme(
legend.position = "bottom",
#legend.position.inside = c(0.95, 0.05),
#legend.justification = c(1, 0),
legend.background = element_blank(),
plot.title = element_text(hjust = 0.5)
)Show the code
mental_health_dat |>
ggplot(aes(y = study, fill = gt_pop >= 0)) +
geom_bar(data = subset(mental_health_dat, gt_pop >= 0), aes(x = after_stat(count)), stat = "count") +
geom_bar(data = subset(mental_health_dat, gt_pop < 0), aes(x = -after_stat(count)), stat = "count") +
theme_minimal() +
scale_x_continuous(labels = abs, breaks = scales::breaks_width(5), limits = c(-5, 15)) +
scale_y_discrete(limits=rev) +
scale_fill_manual(
values = c(met.brewer("Navajo")[2], met.brewer("Navajo")[4]),
labels = c("Negative ES", "Non-negative ES"),
name = "Effect Size"
) +
labs(x = "Number of Effect Size Estimates", y = "", title = "Mental Health") +
theme(
legend.position = "bottom",
#legend.position.inside = c(0.95, 0.2),
#legend.justification = c(1, 0),
legend.background = element_blank(),
plot.title = element_text(hjust = 0.5)
)Overall across all studies and outcomes
Show the code
# Multi-arms studies
multi_arm_studies <-
gb_dat |>
filter(trt_id > 1) |>
reframe(study = unique(study))
# Multi-time-points studies
follow_up_studies <-
gb_dat |>
summarise(
time_points = length(unique(time_after_end_intervention_weeks)),
.by = c(study, trt_id, ctr_id)
) |>
filter(time_points > 1)
# Preregistered studies
prereg_studies <-
gb_dat |>
summarise(
prereg_chr = unique(prereg_chr),
n_es = n(),
.by = study
) |>
summarise(
N_studies = n_distinct(study),
N_es = sum(n_es),
.by = prereg_chr
)
study_sample_sizes <-
gb_dat |>
group_by(study, trt_id, ctr_id) |>
summarise(
effects = n(),
participants = max(N_total)
) |>
summarise(
effects = sum(effects),
participants = mean(participants),
ctl_comparisons = n(),
ctl_arms = paste(ctr_id, collapse = "; ")
) |>
group_by(study, ctl_arms) |>
summarise(
effects = sum(effects),
participants = mean(participants * (1 + ctl_comparisons * (n() - 1) / 2)),
trt_comparisons = n(),
trt_arms = paste(trt_id, collapse = "; "),
ctl_comparisons = mean(ctl_comparisons)
) |>
summarise(
effects = sum(effects),
participants = sum(participants),
trt_comparisons = mean(trt_comparisons),
ctl_comparisons = sum(ctl_comparisons)
)
sample_size_summary <-
study_sample_sizes |>
summarise(
studies = n(),
studies_multiple_tx = sum(trt_comparisons > 1),
studies_multiple_ctl = sum(ctl_comparisons > 1),
n_effects = sum(effects),
mean_effects = mean(effects),
min_effects = min(effects),
median_effects = median(effects),
max_effects = max(effects),
participants = round(sum(participants))
) |>
mutate(prereg = prereg_studies$N_studies[1])
n_studies <- sample_size_summary$studiesShow the code
kable(
sample_size_summary,
col.names = c(
studies = "Studies",
studies_multiple_tx = "Multi-treatment studies",
studies_multiple_ctl = "Multi-control studies",
n_effects = "Effects",
mean_effects = "Mean",
min_effects = "Minimum",
median_effects = "Median",
max_effects = "Maximum",
participants = "Participants",
prereg = "Preregistered studies"
),
digits = 1
) |>
kable_styling(bootstrap_options = c("striped", "condensed"),
full_width = FALSE)| Studies | Multi-treatment studies | Multi-control studies | Effects | Mean | Minimum | Median | Maximum | Participants | Preregistered studies |
|---|---|---|---|---|---|---|---|---|---|
| 49 | 3 | 0 | 349 | 7.1 | 1 | 5 | 40 | 5543 | 23 |
Show the code
gb_dat |>
summarise(
es_count = n(),
.by = study
) |>
arrange(es_count) |>
ggplot(aes(x = es_count)) +
geom_histogram(binwidth = 0.5, fill = met.brewer("Navajo")[4]) +
scale_x_continuous(breaks = seq(0, 40, by = 5)) +
scale_y_continuous(breaks = seq(0, 10, 2)) +
theme_minimal() +
labs(x = "Effect Size Estimates per Study", y = "Number of Studies")Across outcome subgroups
Show the code
# Multi-arms studies
multi_arm_studies_reint <-
reintegration_dat |>
filter(trt_id > 1) |>
reframe(study = unique(study))
# Multi-time-points studies
follow_up_studies_reint <-
reintegration_dat |>
summarise(
time_points = length(unique(time_after_end_intervention_weeks)),
.by = c(study, trt_id, ctr_id)
) |>
filter(time_points > 1)
# Preregistered studies
prereg_studies_reint <-
reintegration_dat |>
summarise(
prereg_chr = unique(prereg_chr),
n_es = n(),
.by = study
) |>
summarise(
N_studies = n_distinct(study),
N_es = sum(n_es),
.by = prereg_chr
)
study_sample_sizes_reint <-
reintegration_dat |>
group_by(study, trt_id, ctr_id) |>
summarise(
effects = n(),
participants = max(N_total)
) |>
summarise(
effects = sum(effects),
participants = mean(participants),
ctl_comparisons = n(),
ctl_arms = paste(ctr_id, collapse = "; ")
) |>
group_by(study, ctl_arms) |>
summarise(
effects = sum(effects),
participants = mean(participants * (1 + ctl_comparisons * (n() - 1) / 2)),
trt_comparisons = n(),
trt_arms = paste(trt_id, collapse = "; "),
ctl_comparisons = mean(ctl_comparisons)
) |>
summarise(
effects = sum(effects),
participants = sum(participants),
trt_comparisons = mean(trt_comparisons),
ctl_comparisons = sum(ctl_comparisons)
)
sample_size_summary_reint <-
study_sample_sizes_reint |>
summarise(
studies = n(),
studies_multiple_tx = sum(trt_comparisons > 1),
studies_multiple_ctl = sum(ctl_comparisons > 1),
n_effects = sum(effects),
mean_effects = mean(effects),
min_effects = min(effects),
median_effects = median(effects),
max_effects = max(effects),
participants = round(sum(participants))
) |>
mutate(prereg = prereg_studies_reint$N_studies[1])
n_studies_reint <- sample_size_summary_reint$studiesShow the code
kable(
sample_size_summary_reint,
col.names = c(
studies = "Studies",
studies_multiple_tx = "Multi-treatment studies",
studies_multiple_ctl = "Multi-control studies",
n_effects = "Effects",
mean_effects = "Mean",
min_effects = "Minimum",
median_effects = "Median",
max_effects = "Maximum",
participants = "Participants",
prereg = "Preregistered studies"
),
digits = 1
) |>
kable_styling(bootstrap_options = c("striped", "condensed"),
full_width = FALSE)| Studies | Multi-treatment studies | Multi-control studies | Effects | Mean | Minimum | Median | Maximum | Participants | Preregistered studies |
|---|---|---|---|---|---|---|---|---|---|
| 46 | 3 | 0 | 205 | 4.5 | 1 | 3 | 28 | 5406 | 22 |
Show the code
# Multi-arms studies
multi_arm_studies_mental <-
mental_health_dat |>
filter(trt_id > 1) |>
reframe(study = unique(study))
# Multi-time-points studies
follow_up_studies_mental <-
mental_health_dat |>
summarise(
time_points = length(unique(time_after_end_intervention_weeks)),
.by = c(study, trt_id, ctr_id)
) |>
filter(time_points > 1)
# Preregistered studies
prereg_studies_mental <-
mental_health_dat |>
summarise(
prereg_chr = unique(prereg_chr),
n_es = n(),
.by = study
) |>
summarise(
N_studies = n_distinct(study),
N_es = sum(n_es),
.by = prereg_chr
)
study_sample_sizes_mental <-
mental_health_dat |>
group_by(study, trt_id, ctr_id) |>
summarise(
effects = n(),
participants = max(N_total)
) |>
summarise(
effects = sum(effects),
participants = mean(participants),
ctl_comparisons = n(),
ctl_arms = paste(ctr_id, collapse = "; ")
) |>
group_by(study, ctl_arms) |>
summarise(
effects = sum(effects),
participants = mean(participants * (1 + ctl_comparisons * (n() - 1) / 2)),
trt_comparisons = n(),
trt_arms = paste(trt_id, collapse = "; "),
ctl_comparisons = mean(ctl_comparisons)
) |>
summarise(
effects = sum(effects),
participants = sum(participants),
trt_comparisons = mean(trt_comparisons),
ctl_comparisons = sum(ctl_comparisons)
)
sample_size_summary_mental <-
study_sample_sizes_mental |>
summarise(
studies = n(),
studies_multiple_tx = sum(trt_comparisons > 1),
studies_multiple_ctl = sum(ctl_comparisons > 1),
n_effects = sum(effects),
mean_effects = mean(effects),
min_effects = min(effects),
median_effects = median(effects),
max_effects = max(effects),
participants = round(sum(participants))
) |>
mutate(prereg = prereg_studies_mental$N_studies[1])
n_studies_mental <- sample_size_summary_mental$studiesShow the code
kable(
sample_size_summary_mental,
col.names = c(
studies = "Studies",
studies_multiple_tx = "Multi-treatment studies",
studies_multiple_ctl = "Multi-control studies",
n_effects = "Effects",
mean_effects = "Mean",
min_effects = "Minimum",
median_effects = "Median",
max_effects = "Maximum",
participants = "Participants",
prereg = "Preregistered studies"
),
digits = 1
) |>
kable_styling(bootstrap_options = c("striped", "condensed"),
full_width = FALSE)| Studies | Multi-treatment studies | Multi-control studies | Effects | Mean | Minimum | Median | Maximum | Participants | Preregistered studies |
|---|---|---|---|---|---|---|---|---|---|
| 42 | 3 | 0 | 144 | 3.4 | 1 | 2 | 18 | 4679 | 20 |
Show the code
reintegration_dat |>
summarise(
es_count = n(),
.by = study
) |>
arrange(es_count) |>
ggplot(aes(x = es_count)) +
geom_histogram(binwidth = 0.5, fill = "cornflowerblue") +
scale_x_continuous(breaks = seq(0, 30, by = 5)) +
scale_y_continuous(breaks = seq(0, 14, 2), limits = c(0, 14)) +
theme_minimal() +
theme(plot.title = element_text(hjust = 0.5)) +
labs(x = "Effect Size Estimates per Study", y = "Number of Studies", title = "Reintegration") +
expand_limits(x = 30)Show the code
mental_health_dat |>
summarise(
es_count = n(),
.by = study
) |>
arrange(es_count) |>
ggplot(aes(x = es_count)) +
geom_histogram(binwidth = 0.5, fill = "gray") +
scale_x_continuous(breaks = seq(0, 20, by = 5)) +
scale_y_continuous(breaks = seq(0, 10, 2), limits = c(0, 11)) +
theme_minimal() +
theme(plot.title = element_text(hjust = 0.5)) +
labs(x = "Effect Size Estimates per Study", y = "Number of Studies", title = "Mental Health") +
expand_limits(x = 20)Data structure by outcome constructs
Show the code
label_cat_hist_ridge <- function(data, n_es, variable, label_map, level_order) {
require(dplyr)
require(rlang)
require(tidyr)
require(ggplot2)
require(forcats)
n_es_exp <- enquo(n_es)
var_exp <- enquo(variable)
data <- data |>
mutate(
!!var_exp := fct_recode(!!var_exp, !!!label_map),
!!var_exp := fct_relevel(!!var_exp, !!!level_order),
!!var_exp := fct_rev(!!var_exp)
)
ggplot(data, aes(
x = !!n_es_exp,
y = !!var_exp,
fill = !!var_exp
)) +
geom_density_ridges(
alpha = 1,
stat = "binline",
bins = 30,
scale = 0.7,
linewidth = 0.1,
draw_baseline = FALSE
) +
theme_minimal() +
labs(y = "", x = "Effect Size Estimates per Study") +
theme(legend.position = "none")
}The following plot shows the effect size estimates distribution within each outcome construct.
Show the code
n_es_by_construct <-
gb_dat |>
filter(str_detect(outcome_construct, "Re")) |>
summarise(effects = n(), .by = c(study, analysis_plan)) |>
mutate(J = n(), .by = c(analysis_plan)) |>
arrange(desc(J))
# Used to construct out_label
#label_dat <-
# n_es_by_construct |>
# summarise(J = n(), N_es = sum(effects), .by = analysis_plan)
out_label <- c(
"Wellbeing and quality of life (J = 24, K = 67)" = "Wellbeing and quality of life",
"Social functioning (degree of impairment) (J =16, K = 47)" = "Social functioning (degree of impairment)",
"Hope, empowerment & self-efficacy (J = 12, K = 32)" = "Hope, empowerment & self-efficacy",
"Alcohol and drug abuse/misuse (J = 7, K = 31)" = "Alcohol and drug abuse/misuse",
"Self-esteem (J = 5, K = 14)" = "Self-esteem",
"Loneliness (J = 4, K = 5)" = "Loneliness",
"Physical health (J = 2, K = 3)" = "Physical health",
"Psychiatric hospitalization (J = 1, K = 1)" = "Psychiatric hospitalization",
"Employment (J = 1, K = 2)" = "Employment"
)
out_level <- c(
"Wellbeing and quality of life (J = 24, K = 67)",
"Social functioning (degree of impairment) (J =16, K = 47)",
"Hope, empowerment & self-efficacy (J = 12, K = 32)",
"Alcohol and drug abuse/misuse (J = 7, K = 31)",
"Self-esteem (J = 5, K = 14)",
"Loneliness (J = 4, K = 5)",
"Physical health (J = 2, K = 3)",
"Psychiatric hospitalization (J = 1, K = 1)",
"Employment (J = 1, K = 2)"
)
label_cat_hist_ridge(
data = n_es_by_construct,
n_es = effects,
variable = analysis_plan,
label_map = out_label,
level_order = out_level
) +
expand_limits(x = 20) +
labs(title = "Reintegrational outcomes") +
theme(plot.title = element_text(hjust = 0.5))Show the code
n_es_by_construct_mental <-
gb_dat |>
filter(str_detect(outcome_construct, "Men")) |>
summarise(effects = n(), .by = c(study, analysis_plan)) |>
mutate(J = n(), .by = c(analysis_plan)) |>
arrange(desc(J))
# Used to construct out_label_mental
#label_dat_mental <-
# n_es_by_construct_mental |>
# summarise(J = n(), N_es = sum(effects), .by = analysis_plan)
out_label_mental <- c(
"General mental health (J = 28, K = 70)" = "General mental health",
"Depression (J = 19, K = 36)" = "Depression",
"Anxiety (J = 9, K = 14)" = "Anxiety",
"Symptoms of psychosis (J = 7, K = 21)" = "Symptoms of psychosis"
)
out_level_mental <- c(
"General mental health (J = 28, K = 70)",
"Depression (J = 19, K = 36)",
"Anxiety (J = 9, K = 14)",
"Symptoms of psychosis (J = 7, K = 21)"
)
label_cat_hist_ridge(
data = n_es_by_construct_mental,
n_es = effects,
variable = analysis_plan,
label_map = out_label_mental,
level_order = out_level_mental
) +
expand_limits(x = 15) +
labs(title = "Mental heath outcomes") +
theme(plot.title = element_text(hjust = 0.5))Primary study sample size
Total sample sizes
Show the code
# Used when describing the treatment group sample sizes
N_t_stud_trtid <-
reintegration_dat |>
reframe(N_treat = max(N_t), .by = c(study, trt_id))
N_t_total <-
N_t_stud_trtid |>
summarise(N_t_total = sum(N_treat), .by = study)
N_c_total <-
reintegration_dat |>
summarise(N_c_total = max(N_c), .by = study)
N_total_dat <-
left_join(N_t_total, N_c_total, by = join_by(study)) |>
mutate(N_total = N_t_total + N_c_total)
primary_sample_size_descriptive <-
N_total_dat$N_total |>
skim() |>
select(-skim_type, -skim_variable, -n_missing, -complete_rate, -numeric.hist) |>
rename_at(vars(starts_with("numeric.")), ~ str_remove(., "numeric\\."))
primary_sample_size_descriptive |>
knitr::kable(
digits = 2,
booktabs = TRUE
) |>
kable_styling(bootstrap_options = c("striped","condensed"), full_width = FALSE)| mean | sd | p0 | p25 | p50 | p75 | p100 |
|---|---|---|---|---|---|---|
| 117.52 | 127.19 | 16 | 40.25 | 60 | 133.25 | 631 |
Show the code
# Used when describing the treatment group sample sizes
N_t_stud_trtid_mental <-
mental_health_dat |>
reframe(N_treat = max(N_t), .by = c(study, trt_id))
N_t_total_mental <-
N_t_stud_trtid_mental |>
summarise(N_t_total = sum(N_treat), .by = study)
N_c_total_mental <-
mental_health_dat |>
summarise(N_c_total = max(N_c), .by = study)
N_total_dat_mental <-
left_join(N_t_total_mental, N_c_total_mental, by = join_by(study)) |>
mutate(N_total = N_t_total + N_c_total)
primary_sample_size_descriptive_mental <-
N_total_dat_mental$N_total |>
skim() |>
select(-skim_type, -skim_variable, -n_missing, -complete_rate, -numeric.hist) |>
rename_at(vars(starts_with("numeric.")), ~ str_remove(., "numeric\\."))
primary_sample_size_descriptive_mental |>
knitr::kable(
digits = 2,
booktabs = TRUE
) |>
kable_styling(bootstrap_options = c("striped","condensed"), full_width = FALSE)| mean | sd | p0 | p25 | p50 | p75 | p100 |
|---|---|---|---|---|---|---|
| 111.4 | 124.97 | 16 | 39.25 | 60.5 | 126 | 631 |
The following plot displays the distribution of study sample sizes at post-test.
Show the code
study_sizes_plot_reint <-
ggplot(N_total_dat, aes(N_total)) +
geom_density(fill = "cornflowerblue", alpha = 0.8) +
geom_blank(aes(x = 0, y = 0)) +
geom_rug(alpha = 0.8) +
scale_y_continuous(NULL, breaks = NULL) +
theme_minimal() +
labs(x = "Total Sample Size", y = "")
study_sizes_plot_reintShow the code
study_sizes_plot_mental <-
ggplot(N_total_dat_mental, aes(N_total)) +
geom_density(fill = "gray", alpha = 0.8) +
geom_blank(aes(x = 0, y = 0)) +
geom_rug(alpha = 0.8) +
scale_y_continuous(NULL, breaks = NULL) +
theme_minimal() +
labs(x = "Total Sample Size", y = "")
study_sizes_plot_mentalTreatment group
Show the code
treatment_sample_size_descriptive <-
N_t_stud_trtid$N_treat |>
skim() |>
select(-skim_type, -skim_variable, -n_missing, -complete_rate, -numeric.hist) |>
rename_at(vars(starts_with("numeric.")), ~ str_remove(., "numeric\\."))
treatment_sample_size_descriptive |>
knitr::kable(
digits = 2,
booktabs = TRUE
) |>
kable_styling(bootstrap_options = c("striped","condensed"), full_width = FALSE)| mean | sd | p0 | p25 | p50 | p75 | p100 |
|---|---|---|---|---|---|---|
| 59.78 | 60.18 | 7 | 22 | 32 | 90 | 315 |
Show the code
treatment_sample_size_descriptive_mental <-
N_t_stud_trtid_mental$N_treat |>
skim() |>
select(-skim_type, -skim_variable, -n_missing, -complete_rate, -numeric.hist) |>
rename_at(vars(starts_with("numeric.")), ~ str_remove(., "numeric\\."))
treatment_sample_size_descriptive_mental |>
knitr::kable(
digits = 2,
booktabs = TRUE
) |>
kable_styling(bootstrap_options = c("striped","condensed"), full_width = FALSE)| mean | sd | p0 | p25 | p50 | p75 | p100 |
|---|---|---|---|---|---|---|
| 56.67 | 58.91 | 7 | 21 | 29 | 70 | 315 |
The following plot displays the distribution of treatment sample sizes at post-test.
Show the code
treatment_sizes_plot_reint <-
ggplot(N_t_stud_trtid, aes(N_treat)) +
geom_density(fill = "cornflowerblue", alpha = 0.8) +
geom_blank(aes(x = 0, y = 0)) +
geom_rug(alpha = 0.8) +
scale_y_continuous(NULL, breaks = NULL) +
theme_minimal() +
labs(x = "Total Treatment Sample Size", y = "")
treatment_sizes_plot_reintShow the code
treatment_sizes_plot_mental <-
ggplot(N_t_stud_trtid_mental, aes(N_treat)) +
geom_density(fill = "gray", alpha = 0.8) +
geom_blank(aes(x = 0, y = 0)) +
geom_rug(alpha = 0.8) +
scale_y_continuous(NULL, breaks = NULL) +
theme_minimal() +
labs(x = "Total Treatment Sample Size", y = "")
treatment_sizes_plot_mentalControl group
Show the code
control_sample_size_descriptive <-
N_total_dat$N_c_total |>
skim() |>
select(-skim_type, -skim_variable, -n_missing, -complete_rate, -numeric.hist) |>
rename_at(vars(starts_with("numeric.")), ~ str_remove(., "numeric\\."))
control_sample_size_descriptive |>
knitr::kable(
digits = 2,
booktabs = TRUE
) |>
kable_styling(bootstrap_options = c("striped","condensed"), full_width = FALSE)| mean | sd | p0 | p25 | p50 | p75 | p100 |
|---|---|---|---|---|---|---|
| 53.85 | 60.21 | 9 | 18.25 | 29.5 | 62.5 | 316 |
Show the code
control_sample_size_descriptive_mental <-
N_total_dat_mental$N_c_total |>
skim() |>
select(-skim_type, -skim_variable, -n_missing, -complete_rate, -numeric.hist) |>
rename_at(vars(starts_with("numeric.")), ~ str_remove(., "numeric\\."))
control_sample_size_descriptive_mental |>
knitr::kable(
digits = 2,
booktabs = TRUE
) |>
kable_styling(bootstrap_options = c("striped","condensed"), full_width = FALSE)| mean | sd | p0 | p25 | p50 | p75 | p100 |
|---|---|---|---|---|---|---|
| 50.69 | 58.27 | 9 | 17.75 | 29 | 62.5 | 316 |
The following plot displays the distribution of control sample sizes at post-test.
Show the code
control_sizes_plot_reint <-
ggplot(N_total_dat, aes(N_c_total)) +
geom_density(fill = "cornflowerblue", alpha = 0.8) +
geom_blank(aes(x = 0, y = 0)) +
geom_rug(alpha = 0.8) +
scale_y_continuous(NULL, breaks = NULL) +
theme_minimal() +
labs(x = "Total Control Group Sample Size", y = "")
control_sizes_plot_reintShow the code
control_sizes_plot_mental <-
ggplot(N_total_dat_mental, aes(N_c_total)) +
geom_density(fill = "gray", alpha = 0.8) +
geom_blank(aes(x = 0, y = 0)) +
geom_rug(alpha = 0.8) +
scale_y_continuous(NULL, breaks = NULL) +
theme_minimal() +
labs(x = "Total Control Group Sample Size", y = "")
control_sizes_plot_mentalStudy sample sizes versus number of effect size estimates per study
Show the code
plot <-
reintegration_dat |>
summarise(effects = n(), .by = study) |>
left_join(N_total_dat, by = join_by(study)) |>
relocate(effects, .after = N_total) |>
ggplot(aes(x = N_total, y = effects)) +
geom_point(alpha = 0.5) +
scale_x_continuous(breaks = seq(0, 650, by = 50)) +
guides(size = "none") +
theme_minimal() +
theme(
legend.position = "inside",
legend.position.inside = c(0.9, 0.05),
legend.justification = c(1, 0),
legend.background = element_blank()
) +
labs(x = "Total sample size", y = "Number of effect size estimates per study", color = "") +
expand_limits(y = 30)
ggMarginal(plot, type = "density")Moderators
Show the code
cat_dat_cross <- function(variable, study_id, data) {
require(dplyr)
require(rlang)
require(tidyr)
var_exp <- enquo(variable)
study_id_exp <- enquo(study_id)
study_id_name <- as_name(study_id_exp)
res_dat <- data %>%
group_by(!!study_id_exp) %>%
reframe(var_exp_mirror = unique(!!var_exp)) %>%
full_join(data,
by = c(study_id_name),
relationship = "many-to-many") %>%
group_by(!!var_exp, var_exp_mirror) %>%
reframe(
m = n_distinct(!!study_id_exp),
k = n()
) %>%
mutate(size = paste0(m, " (", k, ")")) %>%
select(-m, -k) |>
pivot_wider(names_from = var_exp_mirror, values_from = "size")
names(res_dat)[1] <- "level"
res_dat <-
res_dat |>
mutate(
level = factor(level, levels = unique(names(res_dat[-1])))
) |>
arrange(level)
return(res_dat)
}Categorical moderators
Outcome measure
Show the code
outcome_dat_cross <- cat_dat_cross(
data = reintegration_dat,
variable = analysis_plan,
study_id = study
)
outcome_dat_cross |>
knitr::kable(
"html",
col.names = c(
"Outcome",
colnames(outcome_dat_cross)[-1]
)
) |>
kableExtra::column_spec(1, bold = TRUE) |>
kableExtra::footnote(
general = "Values outside the parentheses are number of studies, with the number of samples and effect size estimates shown in the parentheses.",
general_title = "Note: ",
footnote_as_chunk = T
) |>
kableExtra::kable_styling(bootstrap_options = c("striped", "condensed"), full_width = T)| Outcome | Alcohol and drug abuse/misuse | Hope, empowerment & self-efficacy | Physical health | Social functioning (degree of impairment) | Wellbeing and quality of life | Employment | Self-esteem | Loneliness | Psychiatric hospitalization |
|---|---|---|---|---|---|---|---|---|---|
| Alcohol and drug abuse/misuse | 8 (32) | 1 (2) | 1 (1) | 4 (5) | 3 (4) | - | - | - | - |
| Hope, empowerment & self-efficacy | 1 (1) | 12 (32) | - | 1 (2) | 6 (14) | 1 (6) | 3 (15) | 1 (4) | 1 (1) |
| Physical health | 1 (1) | - | 2 (3) | 2 (3) | - | - | - | - | - |
| Social functioning (degree of impairment) | 4 (8) | 1 (2) | 2 (5) | 17 (48) | 8 (31) | - | - | - | - |
| Wellbeing and quality of life | 3 (4) | 6 (12) | - | 8 (35) | 25 (68) | - | 2 (2) | 2 (3) | - |
| Employment | - | 1 (2) | - | - | - | 1 (2) | 1 (2) | - | - |
| Self-esteem | - | 3 (5) | - | - | 2 (2) | 1 (2) | 5 (14) | - | - |
| Loneliness | - | 1 (2) | - | - | 2 (3) | - | - | 4 (5) | - |
| Psychiatric hospitalization | - | 1 (1) | - | - | - | - | - | - | 1 (1) |
| Note: Values outside the parentheses are number of studies, with the number of samples and effect size estimates shown in the parentheses. |
Show the code
outcome_subgroup_dat_cross <- cat_dat_cross(
data = filter(reintegration_dat, str_detect(analysis_plan, "Alco|Hope|Social|Well")),
variable = analysis_plan,
study_id = study
)
outcome_subgroup_dat_cross |>
knitr::kable(
"html",
col.names = c(
"Outcome",
colnames(outcome_subgroup_dat_cross)[-1]
)
) |>
kableExtra::column_spec(1, bold = TRUE) |>
kableExtra::footnote(
general = "Values outside the parentheses are number of studies, with the number of samples and effect size estimates shown in the parentheses.",
general_title = "Note: ",
footnote_as_chunk = T
) |>
kableExtra::kable_styling(bootstrap_options = c("striped", "condensed"), full_width = T)| Outcome | Alcohol and drug abuse/misuse | Hope, empowerment & self-efficacy | Social functioning (degree of impairment) | Wellbeing and quality of life |
|---|---|---|---|---|
| Alcohol and drug abuse/misuse | 8 (32) | 1 (2) | 4 (5) | 3 (4) |
| Hope, empowerment & self-efficacy | 1 (1) | 12 (32) | 1 (2) | 6 (14) |
| Social functioning (degree of impairment) | 4 (8) | 1 (2) | 17 (48) | 8 (31) |
| Wellbeing and quality of life | 3 (4) | 6 (12) | 8 (35) | 25 (68) |
| Note: Values outside the parentheses are number of studies, with the number of samples and effect size estimates shown in the parentheses. |
Show the code
outcome_subgroup_dat_cross_mental <- cat_dat_cross(
data = mental_health_dat,
variable = analysis_plan,
study_id = study
)
outcome_subgroup_dat_cross_mental |>
knitr::kable(
"html",
col.names = c(
"Outcome",
colnames(outcome_subgroup_dat_cross_mental)[-1]
)
) |>
kableExtra::column_spec(1, bold = TRUE) |>
kableExtra::footnote(
general = "Values outside the parentheses are number of studies, with the number of samples and effect size estimates shown in the parentheses.",
general_title = "Note: ",
footnote_as_chunk = T
) |>
kableExtra::kable_styling(bootstrap_options = c("striped", "condensed"), full_width = T)| Outcome | Anxiety | Depression | General mental health | Symptoms of psychosis |
|---|---|---|---|---|
| Anxiety | 9 (14) | 7 (11) | 5 (9) | - |
| Depression | 7 (10) | 20 (37) | 11 (22) | 2 (4) |
| General mental health | 5 (13) | 11 (29) | 29 (72) | 2 (3) |
| Symptoms of psychosis | - | 2 (8) | 2 (3) | 7 (21) |
| Note: Values outside the parentheses are number of studies, with the number of samples and effect size estimates shown in the parentheses. |
Ridge plot of effect size estimates
Show the code
cat_ridge <- function(data, es, v, variable) {
require(dplyr)
require(rlang)
require(tidyr)
require(ggplot2)
es_exp <- enquo(es)
var_exp <- enquo(variable)
v_exp <- enquo(v)
data |>
mutate(!!var_exp := fct_rev(!!var_exp)) |>
ggplot(aes(
x = !!es_exp,
y = !!var_exp,
fill = !!var_exp
)) +
geom_density_ridges(
aes(
point_colour = !!var_exp,
point_size = 1 / !!v_exp
),
alpha = .2,
point_alpha = 0.5,
jittered_points = TRUE
) +
theme_minimal() +
labs(y = "", x = "Standardized Mean Difference (Hedges' g)") +
theme(legend.position = "none")
}Show the code
analyzed_outcomes <-
reintegration_dat |>
filter(str_detect(analysis_plan, "Alco|Hope|Social|Well"))
cat_ridge(data = analyzed_outcomes, es = gt_pop, variable = analysis_plan, v = vgt_pop)Show the code
not_analyzed_outcomes <-
reintegration_dat |>
filter(!str_detect(analysis_plan, "Alco|Hope|Social|Well"))
cat_ridge(data = not_analyzed_outcomes, es = gt_pop, variable = analysis_plan, v = vgt_pop)Show the code
cat_ridge(data = mental_health_dat, es = gt_pop, variable = analysis_plan, v = vgt_pop)Network plot for outcome construct
The following plot shows the network structure of outcomes constructs. Each node represent an outcome construct, the edge between a pair of nodes indicates that there is at least one study that examined the contracts between that pair of constructs The width of the edges indicates the number of studies that compare that pair of constructs. The size of the node corresponds to the number of studies measure that construct.
Show the code
gb_dat_reduced <- gb_dat |> select(study, analysis_plan)
res_dat <- gb_dat_reduced |>
group_by(study) |>
reframe(var_exp_mirror = unique(analysis_plan)) |>
full_join(gb_dat_reduced ,
by = join_by(study),
relationship = "many-to-many") |>
group_by(analysis_plan, var_exp_mirror) |>
reframe(
m = n_distinct(study),
k = n()
) |>
mutate(size = m) |>
select(-m, -k) |>
arrange(var_exp_mirror) |>
pivot_wider(names_from = var_exp_mirror, values_from = "size") |>
arrange(analysis_plan) |>
as.data.frame()
names(res_dat)[1] <- "level"
edges <- res_dat |>
rename(from = "level") |>
pivot_longer(-from, names_to = "to", values_to = "weight") |>
filter(from != to, !is.na(weight)) |>
mutate(
from_chr = as.character(from),
to_chr = as.character(to),
grp_str = paste0(pmin(from_chr, to_chr, na.rm = TRUE), "_", pmax(from_chr, to_chr, na.rm = TRUE))
) |>
distinct(grp_str, .keep_all = TRUE) |>
select(from, to, weight)
g <- graph_from_data_frame(edges, directed = FALSE)
layout <- layout_in_circle(g)
# Adjust label position outward
label_coords <- layout
label_coords[, 1] <- c(
label_coords[1, 1] * 1.35, #1.5,
label_coords[2:6, 1] * 1.5, #1.63,
label_coords[7, 1] * 1.35, #1.68,
label_coords[8:13, 1] * 1.4 #1.63
)
label_coords[, 2] <- c(
label_coords[c(1:3), 2],
label_coords[4, 2] * 1.13,
label_coords[5, 2] * 1.3,
label_coords[6, 2] * 1.13,
label_coords[c(7:9), 2] * 1.13,
label_coords[10, 2] * 1.3,
label_coords[11, 2] * 1.3,
label_coords[12, 2] * 1.3,
label_coords[13, 2] * 1.13
)
node_sizes <- diag(as.matrix(res_dat[, -1]))
plot(
g,
layout = layout,
edge.width = E(g)$weight,
edge.color = met.brewer("Navajo")[5],
vertex.size = node_sizes[c(1:8, 10:13, 9)],
vertex.label = NA,
vertex.color = met.brewer("Navajo")[4],
vertex.frame.width = 0
)
text(
x = label_coords[, 1],
y = label_coords[, 2],
labels = paste0(str_wrap(names(res_dat[c(2:9, 11:14, 10)]), width = 15), "\n(J = ", node_sizes, ")"),
cex = 0.6,
col = "black",
xpd = NA
)Diagnosis (schizophrenia vs. rest of the effects)
Show the code
diagnosis_subgroup_dat_cross <- cat_dat_cross(
data = reintegration_dat,
variable = schizophrenia,
study_id = study
)
diagnosis_subgroup_dat_cross |>
knitr::kable(
"html",
col.names = c(
"Diagnosis",
colnames(diagnosis_subgroup_dat_cross)[-1]
)
) |>
kableExtra::column_spec(1, bold = TRUE) |>
kableExtra::footnote(
general = "Values outside the parentheses are number of studies, with the number of samples and effect size estimates shown in the parentheses.",
general_title = "Note: ",
footnote_as_chunk = T
) |>
kableExtra::kable_styling(bootstrap_options = c("striped", "condensed"), full_width = T)| Diagnosis | Other | Schizophrenia |
|---|---|---|
| Other | 37 (172) | - |
| Schizophrenia | - | 9 (33) |
| Note: Values outside the parentheses are number of studies, with the number of samples and effect size estimates shown in the parentheses. |
Show the code
diagnosis_subgroup_dat_cross_mental <- cat_dat_cross(
data = mental_health_dat,
variable = schizophrenia,
study_id = study
)
diagnosis_subgroup_dat_cross_mental |>
knitr::kable(
"html",
col.names = c(
"Diagnosis",
colnames(diagnosis_subgroup_dat_cross_mental)[-1]
)
) |>
kableExtra::column_spec(1, bold = TRUE) |>
kableExtra::footnote(
general = "Values outside the parentheses are number of studies, with the number of samples and effect size estimates shown in the parentheses.",
general_title = "Note: ",
footnote_as_chunk = T
) |>
kableExtra::kable_styling(bootstrap_options = c("striped", "condensed"), full_width = T)| Diagnosis | Other | Schizophrenia |
|---|---|---|
| Other | 35 (130) | - |
| Schizophrenia | - | 7 (14) |
| Note: Values outside the parentheses are number of studies, with the number of samples and effect size estimates shown in the parentheses. |
Show the code
cat_ridge(data = reintegration_dat, es = gt_pop, variable = schizophrenia, v = vgt_pop)Show the code
cat_ridge(data = mental_health_dat, es = gt_pop, variable = schizophrenia, v = vgt_pop)Type of intervention
Show the code
cbt_subgroup_dat_cross <- cat_dat_cross(
data = reintegration_dat,
variable = CBT_int,
study_id = study
)
cbt_subgroup_dat_cross |>
knitr::kable(
"html",
col.names = c(
"Intervention",
colnames(cbt_subgroup_dat_cross)[-1]
)
) |>
kableExtra::column_spec(1, bold = TRUE) |>
kableExtra::footnote(
general = "Values outside the parentheses are number of studies, with the number of samples and effect size estimates shown in the parentheses.",
general_title = "Note: ",
footnote_as_chunk = T
) |>
kableExtra::kable_styling(bootstrap_options = c("striped", "condensed"), full_width = T)| Intervention | CBT | Other |
|---|---|---|
| CBT | 12 (55) | 1 (5) |
| Other | 1 (5) | 35 (150) |
| Note: Values outside the parentheses are number of studies, with the number of samples and effect size estimates shown in the parentheses. |
Show the code
cbt_subgroup_dat_cross_mental <- cat_dat_cross(
data = mental_health_dat,
variable = CBT_int,
study_id = study
)
cbt_subgroup_dat_cross_mental |>
knitr::kable(
"html",
col.names = c(
"Intervention",
colnames(cbt_subgroup_dat_cross_mental)[-1]
)
) |>
kableExtra::column_spec(1, bold = TRUE) |>
kableExtra::footnote(
general = "Values outside the parentheses are number of studies, with the number of samples and effect size estimates shown in the parentheses.",
general_title = "Note: ",
footnote_as_chunk = T
) |>
kableExtra::kable_styling(bootstrap_options = c("striped", "condensed"), full_width = T)| Intervention | CBT | Other |
|---|---|---|
| CBT | 12 (49) | 1 (2) |
| Other | 1 (2) | 31 (95) |
| Note: Values outside the parentheses are number of studies, with the number of samples and effect size estimates shown in the parentheses. |
Show the code
cat_ridge(data = reintegration_dat, es = gt_pop, variable = CBT_int, v = vgt_pop)Show the code
cat_ridge(data = mental_health_dat, es = gt_pop, variable = CBT_int, v = vgt_pop)EGM-like plot
Show the code
egm_dat_reint <-
reintegration_dat |>
summarise(
n = n(),
n_studies = factor(n_distinct(study), levels = c(1:4)),
.by = c(trt_group, analysis_plan, prereg_chr)
) |>
mutate(
n_prereg = case_match(
prereg_chr,
"Preregistered" ~ 0.5,
"Not preregistered" ~ 0
),
constant = "Intervention",
outcome = case_match(
analysis_plan,
"Alcohol and drug abuse/misuse" ~ "Alcohol/drugs",
"Hope, empowerment & self-efficacy" ~ "Hope",
"Psychiatric hospitalization" ~ "Psych hospital",
"Social functioning (degree of impairment)" ~ "Social func",
"Wellbeing and quality of life" ~ "Wellbeing/QoL",
.default = analysis_plan
),
intervention = case_match(
trt_group,
"group-based CBT" ~ "GrpCBT",
"stress management" ~ "StressMan",
"vocational training" ~ "JobTrain",
"group psychotherapy" ~ "GrpPsychT",
"art therapy" ~ "ArtT",
"illness management" ~ "IllMan",
"group psychoeducation" ~ "GrpPsychEdu",
"seeking safety" ~ "SeekSafe",
"social cognition and interaction training" ~ "SCIT",
"illness and addiction management" ~ "Ill&AddMan",
"social network training" ~ "NetworkTrain",
"cognitive-behavioral social skills training" ~ "CBSST",
"residential treatment" ~ "ResidentTreat",
"positive psychology group intervention" ~ "PosiPsychGrp",
"addiction management" ~ "AddMan",
"reading group intervention" ~ "ReadGrp"
)
#intervention_name = case_match(
# intervention,
# "Sanctions and economic incentives" ~ "Econ incentives",
# "Introduction programmes" ~ "Intro program",
# "Combination programmes" ~ "Combi program",
# "Language training" ~ "Lang train",
# "Labour market training" ~ "Lab market train",
# "Job search assistance" ~" Job search ass",
# "Subsidized public sector employment" ~ "Sub public emp"
#),
#
#outcome = if_else(outcome == "Duration of social assistance spells", "Dur. social ass spells", outcome)
)
egm_dat_reint |>
ggplot(aes(x = n_prereg, y = constant, size = n, color = n_studies)) +
geom_point() +
scale_size(range = c(6, 14)) +
geom_text(aes(label = n), color = "black", size = 3.5) +
scale_x_continuous(breaks = seq(0,0.5,0.5), limits = c(0, 1), labels = c("Conventional", "Preregistered")) +
scale_y_discrete("Interventions") +
facet_grid(intervention~outcome, scales = "free_y", space = "free_y") +
theme_bw() +
theme(
legend.position = "bottom",
axis.text.x = element_text(angle = 45, hjust = 1),
#panel.grid.major = element_blank(),
#panel.grid.minor = element_blank(),
#panel.background = element_blank(),
axis.text.y = element_blank(),
axis.ticks.y = element_blank(),
axis.title.y = element_blank(),
plot.caption = element_text(hjust = 0, size = 14)
) +
coord_cartesian(xlim = c(-0.25, 0.75), ylim = NULL) +
guides(size = "none") +
xlab("Type of registration") +
labs(
color = "Number of studies",
caption = paste0(
"Note: GrpCBT = Group-based CBT, StressMan = Stress mangement, JobTrain = Vocational training, ",
"GrpPsychT = Group psychotherapy, ArtT = Art Therapy, IllMan = Ill management,\n",
"GrpPsychEdu = Group Psychoeducation, SeekSafe = Seeking safety, ",
"SCIT = cognitive-behavioral social skills training, ResidentTreat = Residential treatment,\n",
"PosiPsychGrp = Positive Psychology group therapy, AddMan = Addiction mangement, ",
"ReadGrp = Reading group."
)
)Show the code
egm_dat_mental <-
mental_health_dat |>
summarise(
n = n(),
n_studies = factor(n_distinct(study), levels = c(1:4)),
.by = c(trt_group, analysis_plan, prereg_chr)
) |>
mutate(
n_prereg = case_match(
prereg_chr,
"Preregistered" ~ 0.5,
"Not preregistered" ~ 0
),
constant = "Intervention",
outcome = analysis_plan,
intervention = case_match(
trt_group,
"group-based CBT" ~ "GrpCBT",
"stress management" ~ "StressMan",
"vocational training" ~ "JobTrain",
"group psychotherapy" ~ "GrpPsychT",
"art therapy" ~ "ArtT",
"illness management" ~ "IllMan",
"group psychoeducation" ~ "GrpPsychEdu",
"seeking safety" ~ "SeekSafe",
"social cognition and interaction training" ~ "SCIT",
"illness and addiction management" ~ "Ill&AddMan",
"social network training" ~ "NetworkTrain",
"cognitive-behavioral social skills training" ~ "CBSST",
"residential treatment" ~ "ResidentTreat",
"positive psychology group intervention" ~ "PosiPsychGrp",
"addiction management" ~ "AddMan",
"reading group intervention" ~ "ReadGrp",
"group psychoeducation & social skill training" ~ "GrpPsyEdu&SS"
)
#intervention_name = case_match(
# intervention,
# "Sanctions and economic incentives" ~ "Econ incentives",
# "Introduction programmes" ~ "Intro program",
# "Combination programmes" ~ "Combi program",
# "Language training" ~ "Lang train",
# "Labour market training" ~ "Lab market train",
# "Job search assistance" ~" Job search ass",
# "Subsidized public sector employment" ~ "Sub public emp"
#),
#
#outcome = if_else(outcome == "Duration of social assistance spells", "Dur. social ass spells", outcome)
)
egm_dat_mental |>
ggplot(aes(x = n_prereg, y = constant, size = n, color = n_studies)) +
geom_point() +
scale_size(range = c(6, 14)) +
geom_text(aes(label = n), color = "black", size = 3.5) +
scale_x_continuous(breaks = seq(0,0.5,0.5), limits = c(0, 1), labels = c("Conventional", "Preregistered")) +
scale_y_discrete("Interventions") +
facet_grid(intervention~outcome, scales = "free_y", space = "free_y") +
theme_bw() +
theme(
legend.position = "bottom",
axis.text.x = element_text(angle = 45, hjust = 1),
#panel.grid.major = element_blank(),
#panel.grid.minor = element_blank(),
#panel.background = element_blank(),
axis.text.y = element_blank(),
axis.ticks.y = element_blank(),
axis.title.y = element_blank(),
plot.caption = element_text(hjust = 0, size = 12)
) +
coord_cartesian(xlim = c(-0.25, 0.75), ylim = NULL) +
guides(size = "none") +
xlab("Type of registration") +
labs(
color = "Number of studies",
caption = paste0(
"Note: GrpCBT = Group-based CBT, StressMan = Stress mangement, JobTrain = Vocational training,",
"GrpPsychT = Group psychotherapy, ArtT = Art Therapy,\nIllMan = Ill management,",
"GrpPsychEdu = Group Psychoeducation, SeekSafe = Seeking safety,",
"SCIT = cognitive-behavioral social skills training,\nResidentTreat = Residential treatment,",
"PosiPsychGrp = Positive Psychology group therapy, AddMan = Addiction mangement, ",
"ReadGrp = Reading group,\nGrpPsyEdu&SS = Group psychoeducation & social skill training."
)
)Type of test
Show the code
test_type_dat <-
reintegration_dat |>
filter(test_type != "Raw events")
test_type_dat_cross <- cat_dat_cross(
data = test_type_dat,
variable = test_type,
study_id = study
)
test_type_dat_cross |>
knitr::kable(
"html",
col.names = c(
"Type of test",
colnames(test_type_dat_cross)[-1]
)
) |>
kableExtra::column_spec(1, bold = TRUE) |>
kableExtra::footnote(
general = "Values outside the parentheses are number of studies, with the number of samples and effect size estimates shown in the parentheses.",
general_title = "Note: ",
footnote_as_chunk = T
) |>
kableExtra::kable_styling(bootstrap_options = c("striped", "condensed"), full_width = T)| Type of test | Clinician-rated measure | Self-reported |
|---|---|---|
| Clinician-rated measure | 12 (36) | 5 (8) |
| Self-reported | 5 (8) | 39 (168) |
| Note: Values outside the parentheses are number of studies, with the number of samples and effect size estimates shown in the parentheses. |
Show the code
test_type_dat_mental <-
mental_health_dat |>
filter(test_type != "Raw events")
test_type_dat_cross_mental <- cat_dat_cross(
data = test_type_dat_mental,
variable = test_type,
study_id = study
)
test_type_dat_cross_mental |>
knitr::kable(
"html",
col.names = c(
"Type of test",
colnames(test_type_dat_cross_mental)[-1]
)
) |>
kableExtra::column_spec(1, bold = TRUE) |>
kableExtra::footnote(
general = "Values outside the parentheses are number of studies, with the number of samples and effect size estimates shown in the parentheses.",
general_title = "Note: ",
footnote_as_chunk = T
) |>
kableExtra::kable_styling(bootstrap_options = c("striped", "condensed"), full_width = T)| Type of test | Clinician-rated measure | Self-reported |
|---|---|---|
| Clinician-rated measure | 14 (41) | 5 (11) |
| Self-reported | 5 (18) | 33 (103) |
| Note: Values outside the parentheses are number of studies, with the number of samples and effect size estimates shown in the parentheses. |
Show the code
cat_ridge(data = test_type_dat, es = gt_pop, variable = test_type, v = vgt_pop)Show the code
cat_ridge(data = test_type_dat_mental, es = gt_pop, variable = test_type, v = vgt_pop)Show the code
test_type_dat_all <-
gb_dat |>
filter(test_type != "Raw events") |>
mutate(
p_val = 2 * ( 1 - pnorm( abs(gt_pop) / sqrt(vgt_pop) ) ),
)
ggplot(test_type_dat_all, aes(y = gt_pop, x = p_val, color = test_type)) +
geom_point() +
geom_hline(yintercept = 0) +
geom_vline(xintercept = .05, color = "gray") +
facet_grid(outcome_construct~test_type) +
theme_bw() +
theme(legend.position="none") +
labs(x = "p values", y = "Effect sizes (Hedges' g)")ITT vs. TOT
Show the code
strategy_subgroup_dat_cross <- cat_dat_cross(
data = reintegration_dat,
variable = analysis_strategy,
study_id = study
)
strategy_subgroup_dat_cross |>
knitr::kable(
"html",
col.names = c(
"Strategy",
colnames(strategy_subgroup_dat_cross)[-1]
)
) |>
kableExtra::column_spec(1, bold = TRUE) |>
kableExtra::footnote(
general = paste0("Values outside the parentheses are number of studies,", "
with the number of samples and effect size estimates shown in the parentheses. ",
"TOT = treatment on the treated, ITT = Intention to treat."
),
general_title = "Note: ",
footnote_as_chunk = T
) |>
kableExtra::kable_styling(bootstrap_options = c("striped", "condensed"), full_width = T)| Strategy | ITT | TOT |
|---|---|---|
| ITT | 22 (108) | - |
| TOT | - | 24 (97) |
| Note: Values outside the parentheses are number of studies, with the number of samples and effect size estimates shown in the parentheses. TOT = treatment on the treated, ITT = Intention to treat. |
Show the code
strategy_subgroup_dat_cross_mental <- cat_dat_cross(
data = mental_health_dat,
variable = analysis_strategy,
study_id = study
)
strategy_subgroup_dat_cross_mental |>
knitr::kable(
"html",
col.names = c(
"Strategy",
colnames(strategy_subgroup_dat_cross_mental)[-1]
)
) |>
kableExtra::column_spec(1, bold = TRUE) |>
kableExtra::footnote(
general = paste0("Values outside the parentheses are number of studies,", "
with the number of samples and effect size estimates shown in the parentheses. ",
"TOT = treatment on the treated, ITT = Intention to treat."
),
general_title = "Note: ",
footnote_as_chunk = T
) |>
kableExtra::kable_styling(bootstrap_options = c("striped", "condensed"), full_width = T)| Strategy | ITT | TOT |
|---|---|---|
| ITT | 18 (69) | - |
| TOT | - | 24 (75) |
| Note: Values outside the parentheses are number of studies, with the number of samples and effect size estimates shown in the parentheses. TOT = treatment on the treated, ITT = Intention to treat. |
Show the code
cat_ridge(data = reintegration_dat, es = gt_pop, variable = analysis_strategy, v = vgt_pop)Show the code
cat_ridge(data = mental_health_dat, es = gt_pop, variable = analysis_strategy, v = vgt_pop)RCT vs. QES
Show the code
design_subgroup_dat_cross <- cat_dat_cross(
data = reintegration_dat,
variable = QES_design,
study_id = study
)
design_subgroup_dat_cross |>
knitr::kable(
"html",
col.names = c(
"Design",
colnames(design_subgroup_dat_cross)[-1]
)
) |>
kableExtra::column_spec(1, bold = TRUE) |>
kableExtra::footnote(
general = paste0("Values outside the parentheses are number of studies,", "
with the number of samples and effect size estimates shown in the parentheses."
),
general_title = "Note: ",
footnote_as_chunk = T
) |>
kableExtra::kable_styling(bootstrap_options = c("striped", "condensed"), full_width = T)| Design | QES | RCT |
|---|---|---|
| QES | 8 (18) | - |
| RCT | - | 38 (187) |
| Note: Values outside the parentheses are number of studies, with the number of samples and effect size estimates shown in the parentheses. |
Show the code
design_subgroup_dat_cross_mental <- cat_dat_cross(
data = mental_health_dat,
variable = QES_design,
study_id = study
)
design_subgroup_dat_cross_mental |>
knitr::kable(
"html",
col.names = c(
"Design",
colnames(design_subgroup_dat_cross_mental)[-1]
)
) |>
kableExtra::column_spec(1, bold = TRUE) |>
kableExtra::footnote(
general = paste0("Values outside the parentheses are number of studies,", "
with the number of samples and effect size estimates shown in the parentheses."
),
general_title = "Note: ",
footnote_as_chunk = T
) |>
kableExtra::kable_styling(bootstrap_options = c("striped", "condensed"), full_width = T)| Design | QES | RCT |
|---|---|---|
| QES | 8 (17) | - |
| RCT | - | 34 (127) |
| Note: Values outside the parentheses are number of studies, with the number of samples and effect size estimates shown in the parentheses. |
Show the code
cat_ridge(data = reintegration_dat, es = gt_pop, variable = QES_design, v = vgt_pop)Show the code
cat_ridge(data = mental_health_dat, es = gt_pop, variable = QES_design, v = vgt_pop)Type of control
Show the code
control_subgroup_dat_cross <- cat_dat_cross(
data = reintegration_dat,
variable = control,
study_id = study
)
control_subgroup_dat_cross |>
knitr::kable(
"html",
col.names = c(
"Control",
colnames(control_subgroup_dat_cross)[-1]
)
) |>
kableExtra::column_spec(1, bold = TRUE) |>
kableExtra::footnote(
paste0(
"Values outside the parentheses are number of studies,", "
with the number of samples and effect size estimates shown in the parentheses."
),
general_title = "Note: ",
footnote_as_chunk = T
) |>
kableExtra::kable_styling(bootstrap_options = c("striped", "condensed"), full_width = T)| Control | Individual treatment | TAU | TAU with Waiting-list | Waiting-list only |
|---|---|---|---|---|
| Individual treatment | 3 (4) | - | - | - |
| TAU | - | 30 (154) | - | - |
| TAU with Waiting-list | - | - | 9 (34) | - |
| Waiting-list only | - | - | - | 4 (13) |
| Note: Values outside the parentheses are number of studies, with the number of samples and effect size estimates shown in the parentheses. |
Show the code
control_subgroup_dat_cross_mental <- cat_dat_cross(
data = mental_health_dat,
variable = control,
study_id = study
)
control_subgroup_dat_cross_mental |>
knitr::kable(
"html",
col.names = c(
"Control",
colnames(control_subgroup_dat_cross_mental)[-1]
)
) |>
kableExtra::column_spec(1, bold = TRUE) |>
kableExtra::footnote(
general = "See note in the reintegration table to the left.",
general_title = "Note: ",
footnote_as_chunk = T
) |>
kableExtra::kable_styling(bootstrap_options = c("striped", "condensed"), full_width = T)| Control | Individual treatment | TAU | TAU with Waiting-list | Waiting-list only |
|---|---|---|---|---|
| Individual treatment | 2 (3) | - | - | - |
| TAU | - | 28 (108) | - | - |
| TAU with Waiting-list | - | - | 9 (26) | - |
| Waiting-list only | - | - | - | 3 (7) |
| Note: See note in the reintegration table to the left. |
Show the code
cat_ridge(data = reintegration_dat, es = gt_pop, variable = control, v = vgt_pop)Show the code
cat_ridge(data = mental_health_dat, es = gt_pop, variable = control, v = vgt_pop)Risk of bias (RoB)
Show the code
rob_subgroup_dat_cross <- cat_dat_cross(
data = reintegration_dat,
variable = overall_rob,
study_id = study
)
rob_subgroup_dat_cross |>
knitr::kable(
"html",
col.names = c(
"Risk of bias judgment",
colnames(rob_subgroup_dat_cross)[-1]
)
) |>
kableExtra::column_spec(1, bold = TRUE) |>
kableExtra::footnote(
general = paste0("Values outside the parentheses are number of studies,", "
with the number of samples and effect size estimates shown in the parentheses."
),
general_title = "Note: ",
footnote_as_chunk = T
) |>
kableExtra::kable_styling(bootstrap_options = c("striped", "condensed"), full_width = T)| Risk of bias judgment | Low | Some concerns/Moderate | Serious/High |
|---|---|---|---|
| Low | 10 (69) | - | - |
| Some concerns/Moderate | - | 21 (94) | 1 (1) |
| Serious/High | - | 1 (1) | 16 (42) |
| Note: Values outside the parentheses are number of studies, with the number of samples and effect size estimates shown in the parentheses. |
Show the code
rob_subgroup_dat_cross_mental <- cat_dat_cross(
data = mental_health_dat,
variable = overall_rob,
study_id = study
)
rob_subgroup_dat_cross_mental |>
knitr::kable(
"html",
col.names = c(
"Risk of bias judgment",
colnames(rob_subgroup_dat_cross_mental)[-1]
)
) |>
kableExtra::column_spec(1, bold = TRUE) |>
kableExtra::footnote(
general = paste0("Values outside the parentheses are number of studies,", "
with the number of samples and effect size estimates shown in the parentheses."
),
general_title = "Note: ",
footnote_as_chunk = T
) |>
kableExtra::kable_styling(bootstrap_options = c("striped", "condensed"), full_width = T)| Risk of bias judgment | Low | Some concerns/Moderate | Serious/High |
|---|---|---|---|
| Low | 10 (36) | - | - |
| Some concerns/Moderate | - | 20 (79) | 1 (2) |
| Serious/High | - | 1 (2) | 13 (29) |
| Note: Values outside the parentheses are number of studies, with the number of samples and effect size estimates shown in the parentheses. |
Show the code
cat_ridge(data = reintegration_dat, es = gt_pop, variable = overall_rob, v = vgt_pop)Show the code
cat_ridge(data = gb_dat, es = gt_pop, variable = overall_rob, v = vgt_pop) Preregistered vs. not preregistered studies
Show the code
prereg_subgroup_dat_cross <- cat_dat_cross(
data = reintegration_dat,
variable = prereg_chr,
study_id = study
)
prereg_subgroup_dat_cross |>
knitr::kable(
"html",
col.names = c(
"Registration",
colnames(prereg_subgroup_dat_cross)[-1]
)
) |>
kableExtra::column_spec(1, bold = TRUE) |>
kableExtra::footnote(
general = paste0("Values outside the parentheses are number of studies,", "
with the number of samples and effect size estimates shown in the parentheses."
),
general_title = "Note: ",
footnote_as_chunk = T
) |>
kableExtra::kable_styling(bootstrap_options = c("striped", "condensed"), full_width = T)| Registration | Not preregistered | Preregistered |
|---|---|---|
| Not preregistered | 24 (65) | - |
| Preregistered | - | 22 (140) |
| Note: Values outside the parentheses are number of studies, with the number of samples and effect size estimates shown in the parentheses. |
Show the code
prereg_subgroup_dat_cross_mental <- cat_dat_cross(
data = mental_health_dat,
variable = prereg_chr,
study_id = study
)
prereg_subgroup_dat_cross_mental |>
knitr::kable(
"html",
col.names = c(
"Risk of bias judgment",
colnames(prereg_subgroup_dat_cross_mental)[-1]
)
) |>
kableExtra::column_spec(1, bold = TRUE) |>
kableExtra::footnote(
general = paste0("Values outside the parentheses are number of studies,", "
with the number of samples and effect size estimates shown in the parentheses."
),
general_title = "Note: ",
footnote_as_chunk = T
) |>
kableExtra::kable_styling(bootstrap_options = c("striped", "condensed"), full_width = T)| Risk of bias judgment | Not preregistered | Preregistered |
|---|---|---|
| Not preregistered | 22 (62) | - |
| Preregistered | - | 20 (82) |
| Note: Values outside the parentheses are number of studies, with the number of samples and effect size estimates shown in the parentheses. |
Show the code
cat_ridge(data = reintegration_dat, es = gt_pop, variable = prereg_chr, v = vgt_pop)Show the code
cat_ridge(data = gb_dat, es = gt_pop, variable = prereg_chr, v = vgt_pop) Show the code
cat_ridge(data = gb_dat, es = gt_pop, variable = overall_rob, v = vgt_pop) +
facet_grid(outcome_construct~prereg_chr) +
theme(
strip.background = element_rect(color = "black", fill = "gray92")
)Continuous moderators
Show the code
var_labels <- c(
"Mean age" = "age",
"Percent Male" = "male_pct",
"Total Number of Sessions" = "sessions",
"Sessions per Week" = "intensity",
"Length of Intervention (in Weeks)" = "duration",
"Weeks After End of Intervention" = "timing",
"Weeks from Baseline" = "weeks_from_baseline"
)
continuous_descriptives <-
reintegration_dat |>
summarise(
age = mean(age_mean),
male_pct = mean(male_pct),
sessions = mean(total_number_of_sessions),
intensity = mean(sessions_per_week),
duration = mean(duration_in_weeks),
timing = mean(time_after_end_intervention_weeks),
weeks_from_baseline = mean(time_from_baseline_weeks),
.by = study
)
continuous_descriptives_tab <-
continuous_descriptives |>
#pivot_longer(
# cols = age:male_pct,
# names_to = "var",
# values_to = "val"
#) |>
#arrange(var)
gather(var, val, age, male_pct, sessions, intensity, duration, timing, weeks_from_baseline) |>
summarise(
`% Missing` = 100 * mean(is.na(val)),
Mean = mean(val, na.rm = TRUE),
SD = sd(val, na.rm = TRUE),
Min = min(val, na.rm = TRUE),
LQ = quantile(val, na.rm = TRUE)[2],
Median = median(val, na.rm = TRUE),
UQ = quantile(val, na.rm = TRUE)[4],
Max = max(val, na.rm = TRUE),
.by = var
) |>
mutate(
var = factor(var, levels = var_labels, labels = names(var_labels))
)
knitr::kable(
continuous_descriptives_tab,
col.names = c("Variable", colnames(continuous_descriptives_tab)[-1]),
digits = 1,
booktabs = TRUE
) |>
kable_styling(bootstrap_options = c("striped", "condensed"), full_width = FALSE) |>
collapse_rows(1, valign = "top")| Variable | % Missing | Mean | SD | Min | LQ | Median | UQ | Max |
|---|---|---|---|---|---|---|---|---|
| Mean age | 0.0 | 40.6 | 9.0 | 24.9 | 35.7 | 40.8 | 43.8 | 67.4 |
| Percent Male | 2.2 | 46.6 | 23.4 | 0.0 | 32.0 | 46.3 | 68.0 | 81.2 |
| Total Number of Sessions | 2.2 | 21.0 | 21.9 | 3.0 | 8.0 | 12.0 | 24.0 | 104.0 |
| Sessions per Week | 2.2 | 1.3 | 1.5 | 0.1 | 1.0 | 1.0 | 1.0 | 10.5 |
| Length of Intervention (in Weeks) | 0.0 | 18.3 | 16.9 | 4.0 | 8.0 | 12.0 | 24.0 | 78.0 |
| Weeks After End of Intervention | 0.0 | 5.9 | 10.1 | 0.0 | 0.0 | 0.5 | 6.4 | 52.0 |
| Weeks from Baseline | 0.0 | 24.2 | 22.7 | 6.0 | 12.0 | 18.0 | 26.0 | 130.0 |
Show the code
var_labels_mental <- c(
"Mean age" = "age",
"Percent Male" = "male_pct",
"N Sessions" = "sessions",
"Sessions Week" = "intensity",
"Length" = "duration",
"Weeks After Intervention" = "timing",
"Weeks Baseline" = "weeks_from_baseline"
)
continuous_descriptives_mental <-
mental_health_dat |>
summarise(
age = mean(age_mean),
male_pct = mean(male_pct),
sessions = mean(total_number_of_sessions),
intensity = mean(sessions_per_week),
duration = mean(duration_in_weeks),
timing = mean(time_after_end_intervention_weeks),
weeks_from_baseline = mean(time_from_baseline_weeks),
.by = study
)
continuous_descriptives_tab_mental <-
continuous_descriptives_mental |>
#pivot_longer(
# cols = age:male_pct,
# names_to = "var",
# values_to = "val"
#) |>
#arrange(var)
gather(var, val, age, male_pct, sessions, intensity, duration, timing, weeks_from_baseline) |>
summarise(
`% Missing` = 100 * mean(is.na(val)),
Mean = mean(val, na.rm = TRUE),
SD = sd(val, na.rm = TRUE),
Min = min(val, na.rm = TRUE),
LQ = quantile(val, na.rm = TRUE)[2],
Median = median(val, na.rm = TRUE),
UQ = quantile(val, na.rm = TRUE)[4],
Max = max(val, na.rm = TRUE),
.by = var
) |>
mutate(
var = factor(var, levels = var_labels_mental, labels = names(var_labels_mental))
)
knitr::kable(
continuous_descriptives_tab_mental,
col.names = c("Variable", colnames(continuous_descriptives_tab)[-1]),
digits = 1,
booktabs = TRUE
) |>
kable_styling(bootstrap_options = c("striped", "condensed"), full_width = FALSE) |>
collapse_rows(1, valign = "top")| Variable | % Missing | Mean | SD | Min | LQ | Median | UQ | Max |
|---|---|---|---|---|---|---|---|---|
| Mean age | 0.0 | 39.6 | 9.3 | 21.6 | 34.9 | 39.7 | 43.0 | 67.4 |
| Percent Male | 2.4 | 45.2 | 23.5 | 0.0 | 28.9 | 46.3 | 67.2 | 81.2 |
| N Sessions | 2.4 | 21.6 | 22.5 | 3.0 | 8.0 | 13.0 | 24.0 | 104.0 |
| Sessions Week | 2.4 | 1.3 | 1.5 | 0.1 | 1.0 | 1.0 | 1.0 | 10.5 |
| Length | 0.0 | 19.3 | 17.5 | 4.0 | 8.5 | 12.0 | 25.5 | 78.0 |
| Weeks After Intervention | 0.0 | 6.8 | 11.0 | 0.0 | 0.0 | 1.0 | 7.6 | 52.0 |
| Weeks Baseline | 0.0 | 26.1 | 24.1 | 6.0 | 12.0 | 17.0 | 28.8 | 130.0 |
Age distribution across studies
Show the code
density_plot <- function(variable, x_title, data, color = "cornflowerblue") {
require(dplyr)
require(tidyr)
require(ggplot2)
require(rlang)
require(MetBrewer)
var_exp <- enquo(variable)
var_str <- as_label(var_exp)
data |>
ggplot(aes(x = !!var_exp)) +
geom_density(fill = color, alpha = 0.8) +
geom_rug(alpha = 0.7, length = unit(0.04, "npc")) +
scale_y_continuous(labels = scales::label_number(accuracy = 10^(-3))) +
theme_minimal() +
labs(x = x_title, y = "")
}Show the code
age_density <- density_plot(age, "Mean Age", continuous_descriptives)
age_density + expand_limits(x = 70)Show the code
age_density_mental <- density_plot(age, "Mean Age", continuous_descriptives_mental, color = "gray")
age_density_mental + expand_limits(x = 70)Percent males in sample distribution across studies
Show the code
male_density <- suppressWarnings(density_plot(male_pct, "Proportion Male", continuous_descriptives))
male_density Show the code
male_density_mental <- suppressWarnings(density_plot(male_pct, "Proportion Male", continuous_descriptives_mental, color = "gray"))
male_density_mental Total number of sessions
Show the code
hist_plot <- function(variable, x_title, data, color = "cornflowerblue") {
require(dplyr)
require(tidyr)
require(ggplot2)
require(rlang)
require(MetBrewer)
var_exp <- enquo(variable)
var_str <- as_label(var_exp)
x_vals <- data[[var_str]]
min_val <- floor(min(x_vals, na.rm = TRUE))
max_val <- ceiling(max(x_vals, na.rm = TRUE))
data |>
ggplot(aes(x = !!var_exp)) +
geom_histogram(binwidth = 1, boundary = 0, fill = color, alpha = 0.8) +
scale_x_continuous(breaks = pretty(seq(min_val, max_val, by = 1), n = 5)) +
scale_y_continuous(breaks = seq(0, 10, 2)) +
theme_minimal() +
labs(x = x_title, y = "")
}Show the code
sessions_hist <- hist_plot(sessions, "Total Number of Sessions in Intervention", continuous_descriptives)
sessions_hist + labs(title = "Reintegration") + theme(plot.title = element_text(hjust = 0.5))Show the code
sessions_hist_mental <- hist_plot(sessions, "Total Number of Sessions in Intervention", continuous_descriptives_mental, color = "gray")
sessions_hist_mental + labs(title = "Mental Health") + theme(plot.title = element_text(hjust = 0.5))Duration and intensity (number of sessions per week)
Show the code
reintegration_dat |>
select(study, duration_in_weeks, sessions_per_week, N_total) |>
filter(!is.na(sessions_per_week)) |>
arrange(desc(duration_in_weeks)) |>
mutate(
study = factor(study, levels = unique(study)),
sessions = case_when(
sessions_per_week < 1 ~ "1<",
sessions_per_week == 1 ~ "1",
sessions_per_week == 1.5 ~ "1.5",
sessions_per_week == 2 ~ "2",
sessions_per_week == 2.5 ~ "2.5",
sessions_per_week > 2 ~ ">10"
),
sessions = factor(sessions, levels = unique(sessions))
) |>
ggplot(aes(y = study, x = duration_in_weeks, color = study)) +
geom_segment(aes(x = 0, xend = duration_in_weeks, y = study, yend = study)) +
geom_vline(xintercept = c(13, 26, 52, 78), linetype = "dashed", alpha = 0.5) +
geom_point(
aes(size = N_total)
) +
scale_x_continuous(breaks = seq(0, 80, 10)) +
facet_grid(vars(sessions_per_week), scales = "free_y", space = "free_y", switch = "y") +
#scale_size(breaks = c(0.5, 1, 1.5, 2, 10.5), limits = c(0, 10.5)) +
labs(
x = "Lenght of intervention in weeks",
y = "",
caption = paste0(
"The light gray facet grids indicate the average number of sessions per week.\n",
"The dashed lines indicate 3 months, 6 months, 1 year, and 1.5 years, respectively.\n",
"The point sizes are weighted by the study sample sizes."
)
) +
theme_minimal() +
scale_colour_discrete(guide = "none") +
theme(
legend.position = "none",
strip.text = element_text(color = "black"),
strip.background.y = element_rect(fill = "gray93", color = "white"),
strip.text.y.left = element_text(angle = 0),
plot.caption = element_text(hjust = 0)
) Show the code
mental_health_dat |>
select(study, duration_in_weeks, sessions_per_week, N_total) |>
filter(!is.na(sessions_per_week)) |>
arrange(desc(duration_in_weeks)) |>
mutate(
study = factor(study, levels = unique(study)),
sessions = case_when(
sessions_per_week < 1 ~ "Less than 1",
sessions_per_week == 1 ~ "1 per week",
sessions_per_week == 2 ~ "2 per week",
sessions_per_week > 2 ~ ">10"
),
sessions = factor(sessions, levels = unique(sessions))
) |>
ggplot(aes(y = study, x = duration_in_weeks, color = study)) +
geom_segment(aes(x = 0, xend = duration_in_weeks, y = study, yend = study)) +
geom_vline(xintercept = c(13, 26, 52, 78), linetype = "dashed", alpha = 0.5) +
geom_point(
aes(size = N_total)
) +
scale_x_continuous(breaks = seq(0, 80, 10)) +
facet_grid(vars(sessions_per_week), scales = "free_y", space = "free_y", switch = "y") +
#scale_size(breaks = c(0.5, 1, 1.5, 2, 10.5), limits = c(0, 10.5)) +
labs(
x = "Lenght of intervention in weeks",
y = "",
caption =
paste0(
"The light gray facet grids indicate the average number of sessions per week.\n",
"The dashed lines indicate 3 months, 6 months, 1 year, and 1.5 years, respectively.\n",
"The point sizes are weighted by the study sample sizes."
)
) +
theme_minimal() +
scale_colour_discrete(guide = "none") +
theme(
legend.position = "none",
strip.text = element_text(color = "black"),
strip.background.y = element_rect(fill = "gray93", color = "white"),
strip.text.y.left = element_text(angle = 0),
plot.caption = element_text(hjust = 0)
) Weeks after end of intervention
Show the code
reintegration_dat |>
select(study, time_after_end_intervention_weeks, N_total) |>
arrange(desc(study)) |>
mutate(study = factor(study, levels = unique(study))) |>
ggplot(aes(y = study, x = time_after_end_intervention_weeks, color = study)) +
geom_point(aes(size = N_total),
alpha = 0.5) +
geom_line() +
labs(x = "Weeks after end of intervention all studies", y = "")+
theme_minimal() +
theme(legend.position = "none")Show the code
mental_health_dat |>
select(study, time_after_end_intervention_weeks, N_total) |>
arrange(desc(study)) |>
mutate(study = factor(study, levels = unique(study))) |>
ggplot(aes(y = study, x = time_after_end_intervention_weeks, color = study)) +
geom_point(aes(size = N_total),
alpha = 0.5) +
geom_line() +
labs(x = "Weeks after end of intervention all studies", y = "")+
theme_minimal() +
theme(legend.position = "none")Correlation between effect size estimates and measurement timing
Show the code
reintegration_dat |>
select(study, gt_pop, vgt_pop, time_after_end_intervention_weeks) |>
ggplot() +
aes(x = time_after_end_intervention_weeks, y = gt_pop, color = study) +
geom_vline(xintercept = 0) +
geom_hline(yintercept = 0) +
geom_point(aes(size = 1/vgt_pop), alpha = 0.30) +
geom_smooth(method = "lm", formula = y ~ x, color = "yellow") +
scale_x_continuous(breaks = seq(0, 55, 5)) +
theme_minimal() +
theme(legend.position = "none") +
labs(x = "Follow-up duration (months)", y = "Hedges' g")Show the code
mental_health_dat |>
select(study, gt_pop, vgt_pop, time_after_end_intervention_weeks) |>
ggplot() +
aes(x = time_after_end_intervention_weeks, y = gt_pop, color = study) +
geom_vline(xintercept = 0) +
geom_hline(yintercept = 0) +
geom_point(aes(size = 1/vgt_pop), alpha = 0.30) +
geom_smooth(method = "lm", formula = y ~ x, color = "yellow") +
scale_x_continuous(breaks = seq(0, 55, 5)) +
theme_minimal() +
theme(legend.position = "none") +
labs(x = "Follow-up duration (months)", y = "Hedges' g")Multivariate structure
Covariance plots
Show the code
multivariate_dat_reint <-
reintegration_dat |>
filter(str_detect(analysis_plan, "Alco|Hope|Social|Well")) |>
select(
`Outcome` = analysis_plan,
`Sample diagnosis` = schizophrenia,
`Intervention` = CBT_int,
`Type of test` = test_type,
`Mean age` = age_mean,
`% male` = male_pct,
`Duration` = duration_in_weeks,
`Intensity` = sessions_per_week,
`Follow-up` = time_after_end_intervention_weeks
)
multivariate_pairs_reint <- ggpairs(multivariate_dat_reint) + theme(
text = element_text(size = 18),
axis.text.x = element_text(size = 10, angle = 45, vjust = 1, hjust=1),
axis.text.y = element_text(size = 10)
)
multivariate_pairs_reintShow the code
multivariate_dat_mental <-
mental_health_dat |>
select(
`Outcome` = analysis_plan,
`Sample diagnosis` = schizophrenia,
`Intervention` = CBT_int,
`Type of test` = test_type,
`Mean age` = age_mean,
`% male` = male_pct,
`Duration` = duration_in_weeks,
`Intensity` = sessions_per_week,
`Follow-up` = time_after_end_intervention_weeks
)
multivariate_pairs_mental <- ggpairs(multivariate_dat_mental) + theme(
text = element_text(size = 18),
axis.text.x = element_text(size = 10, angle = 45, vjust = 1, hjust=1),
axis.text.y = element_text(size = 10)
)
multivariate_pairs_mentalShow the code
multivariate_dat_reint_method <-
reintegration_dat |>
filter(str_detect(analysis_plan, "Alco|Hope|Social|Well")) |>
select(
`Strategy` = analysis_strategy,
`Design` = QES_design,
`Control grp` = control,
`RoB` = overall_rob,
`Preregistration` = prereg_chr,
`Mean age` = age_mean,
`% male` = male_pct,
`Duration` = duration_in_weeks,
`Intensity` = sessions_per_week,
`Follow-up` = time_after_end_intervention_weeks
)
multivariate_pairs_reint_method <- ggpairs(multivariate_dat_reint_method) + theme(
text = element_text(size = 18),
axis.text.x = element_text(size = 9, angle = 45, vjust = 1, hjust=1),
axis.text.y = element_text(size = 9)
)
multivariate_pairs_reint_methodShow the code
multivariate_dat_mental_method <-
mental_health_dat |>
select(
`Strategy` = analysis_strategy,
`Design` = QES_design,
`Control grp` = control,
`RoB` = overall_rob,
`Preregistration` = prereg_chr,
`Mean age` = age_mean,
`% male` = male_pct,
`Duration` = duration_in_weeks,
`Intensity` = sessions_per_week,
`Follow-up` = time_after_end_intervention_weeks
)
multivariate_pairs_mental_method <- ggpairs(multivariate_dat_mental_method) + theme(
text = element_text(size = 18),
axis.text.x = element_text(size = 9, angle = 45, vjust = 1, hjust=1),
axis.text.y = element_text(size = 9)
)
multivariate_pairs_mental_method Show the code
multivariate_dat_reint_method_theo <-
reintegration_dat |>
filter(str_detect(analysis_plan, "Alco|Hope|Social|Well")) |>
select(
`Outcome` = analysis_plan,
`Sample diagnosis` = schizophrenia,
`Intervention` = CBT_int,
`Type of test` = test_type,
`Strategy` = analysis_strategy,
`Design` = QES_design,
`Control grp` = control,
`RoB` = overall_rob,
`Preregistration` = prereg_chr
)
multivariate_pairs_reint_method_theo <- ggpairs(multivariate_dat_reint_method_theo) + theme(
text = element_text(size = 18),
axis.text.x = element_text(size = 9, angle = 45, vjust = 1, hjust=1),
axis.text.y = element_text(size = 9)
)
multivariate_pairs_reint_method_theoShow the code
multivariate_dat_mental_method_theo <-
mental_health_dat |>
select(
`Outcome` = analysis_plan,
`Sample diagnosis` = schizophrenia,
`Intervention` = CBT_int,
`Type of test` = test_type,
`Strategy` = analysis_strategy,
`Design` = QES_design,
`Control grp` = control,
`RoB` = overall_rob,
`Preregistration` = prereg_chr,
`Mean age` = age_mean,
`% male` = male_pct,
`Duration` = duration_in_weeks,
`Intensity` = sessions_per_week,
`Follow-up` = time_after_end_intervention_weeks
)
multivariate_pairs_mental_method_theo <- ggpairs(multivariate_dat_mental_method_theo) + theme(
text = element_text(size = 18),
axis.text.x = element_text(size = 9, angle = 45, vjust = 1, hjust=1),
axis.text.y = element_text(size = 9)
)
multivariate_pairs_mental_method_theoCovariance matrices
Show the code
cor_mat_dat_cat <-
reintegration_dat |>
filter(str_detect(analysis_plan, "Alco|Hope|Social|Well") & test_type != "Raw events") |>
select(
plan = analysis_plan,
samp = schizophrenia,
treat = CBT_int,
test = test_type,
str = analysis_strategy,
des = QES_design,
ctr = control,
rob = overall_rob,
pre = prereg_chr
)
cat_dummy_dat <-
fastDummies::dummy_cols(cor_mat_dat_cat) %>%
select(where(is.numeric))
cor_mat_dat_con <-
reintegration_dat |>
filter(str_detect(analysis_plan, "Alco|Hope|Social|Well") & test_type != "Raw events") |>
select(
age = age_mean,
male = male_pct,
dur = duration_in_weeks,
int = sessions_per_week,
FU = time_after_end_intervention_weeks,
sess = total_number_of_sessions
)
cor_mat_dat <-
bind_cols(cat_dummy_dat, cor_mat_dat_con) |>
select(
alcho = `plan_Alcohol and drug abuse/misuse`,
hope = `plan_Hope, empowerment & self-efficacy`,
sfunc = `plan_Social functioning (degree of impairment)`,
wellb = `plan_Wellbeing and quality of life`,
s_schizo = samp_Schizophrenia,
s_oth = samp_Other,
cbt_trt = treat_CBT,
oth_trt = treat_Other,
test_clin = `test_Clinician-rated measure`,
test_self = `test_Self-reported`,
itt = str_ITT,
tot = str_TOT,
qes = des_QES,
rct = des_RCT,
tau = ctr_TAU,
tau_wait = `ctr_TAU with Waiting-list`,
wait = `ctr_Waiting-list only`,
ind_trt = `ctr_Individual treatment` ,
rob_low = rob_Low,
rob_mod = `rob_Some concerns/Moderate`,
rob_high = `rob_Serious/High`,
prereg = pre_Preregistered,
conventional = `pre_Not preregistered`,
everything()
) |>
na.omit()
cor_mat <-
cor(
model.matrix(
reformulate(names(cor_mat_dat[,1:ncol(cor_mat_dat)])),
data = cor_mat_dat
)
) |>
as.data.frame() |>
select(-c(`(Intercept)`)) |>
na.omit() |>
mutate(
across(.cols = everything(), ~ round(.x, 2))
)
cor_mat_formatted <-
cor_mat |>
mutate(
across(.cols = everything(), ~ cell_spec(.x, bold = ifelse(abs(.x) > 0.5, T, F)))
)
kbl(
cor_mat_formatted,
escape = F,
col.names = c("Category", colnames(cor_mat))
) |>
kable_styling(
bootstrap_options = c("striped", "hover"),
font_size = 10
) |>
scroll_box(width = "100%", height = "100%", fixed_thead = TRUE)| Category | alcho | hope | sfunc | wellb | s_schizo | s_oth | cbt_trt | oth_trt | test_clin | test_self | itt | tot | qes | rct | tau | tau_wait | wait | ind_trt | rob_low | rob_mod | rob_high | prereg | conventional | age | male | dur | int | FU | sess |
|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
| alcho | 1 | -0.22 | -0.27 | -0.37 | -0.16 | 0.16 | -0.21 | 0.21 | 0.48 | -0.48 | 0.32 | -0.32 | 0.03 | -0.03 | 0.03 | 0.05 | -0.1 | -0.06 | -0.36 | 0.37 | -0.03 | 0.01 | -0.01 | -0.26 | -0.34 | 0 | 0.06 | -0.05 | 0.13 |
| hope | -0.22 | 1 | -0.28 | -0.37 | 0 | 0 | -0.31 | 0.31 | -0.23 | 0.23 | -0.15 | 0.15 | -0.04 | 0.04 | -0.14 | -0.04 | 0.32 | 0.05 | -0.21 | 0.17 | 0.04 | -0.15 | 0.15 | 0.12 | 0.15 | -0.13 | -0.04 | -0.12 | -0.11 |
| sfunc | -0.27 | -0.28 | 1 | -0.46 | 0.19 | -0.19 | 0.23 | -0.23 | -0.04 | 0.04 | -0.01 | 0.01 | -0.08 | 0.08 | 0.05 | 0 | -0.13 | 0.02 | 0.29 | -0.26 | -0.03 | 0.05 | -0.05 | -0.17 | 0.03 | 0.29 | -0.06 | 0.18 | 0.16 |
| wellb | -0.37 | -0.37 | -0.46 | 1 | -0.04 | 0.04 | 0.21 | -0.21 | -0.16 | 0.16 | -0.12 | 0.12 | 0.08 | -0.08 | 0.04 | -0.01 | -0.06 | -0.01 | 0.19 | -0.2 | 0.02 | 0.07 | -0.07 | 0.26 | 0.12 | -0.16 | 0.04 | -0.02 | -0.16 |
| s_schizo | -0.16 | 0 | 0.19 | -0.04 | 1 | -1 | -0.18 | 0.18 | -0.08 | 0.08 | 0.15 | -0.15 | -0.03 | 0.03 | 0.04 | -0.05 | -0.09 | 0.19 | 0.33 | -0.38 | 0.08 | 0.01 | -0.01 | -0.22 | 0.54 | 0.44 | -0.01 | 0.03 | 0.34 |
| s_oth | 0.16 | 0 | -0.19 | 0.04 | -1 | 1 | 0.18 | -0.18 | 0.08 | -0.08 | -0.15 | 0.15 | 0.03 | -0.03 | -0.04 | 0.05 | 0.09 | -0.19 | -0.33 | 0.38 | -0.08 | -0.01 | 0.01 | 0.22 | -0.54 | -0.44 | 0.01 | -0.03 | -0.34 |
| cbt_trt | -0.21 | -0.31 | 0.23 | 0.21 | -0.18 | 0.18 | 1 | -1 | -0.12 | 0.12 | -0.27 | 0.27 | -0.04 | 0.04 | 0.07 | -0.07 | -0.02 | 0.01 | 0.28 | -0.22 | -0.07 | 0.05 | -0.05 | 0.03 | -0.26 | -0.27 | -0.04 | 0.18 | -0.28 |
| oth_trt | 0.21 | 0.31 | -0.23 | -0.21 | 0.18 | -0.18 | -1 | 1 | 0.12 | -0.12 | 0.27 | -0.27 | 0.04 | -0.04 | -0.07 | 0.07 | 0.02 | -0.01 | -0.28 | 0.22 | 0.07 | -0.05 | 0.05 | -0.03 | 0.26 | 0.27 | 0.04 | -0.18 | 0.28 |
| test_clin | 0.48 | -0.23 | -0.04 | -0.16 | -0.08 | 0.08 | -0.12 | 0.12 | 1 | -1 | 0.24 | -0.24 | 0.09 | -0.09 | 0.18 | -0.12 | -0.1 | -0.06 | -0.27 | 0.26 | 0 | -0.02 | 0.02 | -0.18 | -0.37 | -0.02 | 0.06 | -0.01 | 0.03 |
| test_self | -0.48 | 0.23 | 0.04 | 0.16 | 0.08 | -0.08 | 0.12 | -0.12 | -1 | 1 | -0.24 | 0.24 | -0.09 | 0.09 | -0.18 | 0.12 | 0.1 | 0.06 | 0.27 | -0.26 | 0 | 0.02 | -0.02 | 0.18 | 0.37 | 0.02 | -0.06 | 0.01 | -0.03 |
| itt | 0.32 | -0.15 | -0.01 | -0.12 | 0.15 | -0.15 | -0.27 | 0.27 | 0.24 | -0.24 | 1 | -1 | -0.09 | 0.09 | 0.29 | -0.14 | -0.23 | -0.14 | -0.17 | 0.26 | -0.14 | 0.2 | -0.2 | -0.14 | -0.05 | 0.28 | -0.02 | -0.06 | 0.21 |
| tot | -0.32 | 0.15 | 0.01 | 0.12 | -0.15 | 0.15 | 0.27 | -0.27 | -0.24 | 0.24 | -1 | 1 | 0.09 | -0.09 | -0.29 | 0.14 | 0.23 | 0.14 | 0.17 | -0.26 | 0.14 | -0.2 | 0.2 | 0.14 | 0.05 | -0.28 | 0.02 | 0.06 | -0.21 |
| qes | 0.03 | -0.04 | -0.08 | 0.08 | -0.03 | 0.03 | -0.04 | 0.04 | 0.09 | -0.09 | -0.09 | 0.09 | 1 | -1 | 0 | -0.1 | 0.07 | 0.17 | -0.18 | -0.17 | 0.47 | -0.39 | 0.39 | -0.12 | -0.07 | 0.22 | 0.41 | -0.06 | 0.47 |
| rct | -0.03 | 0.04 | 0.08 | -0.08 | 0.03 | -0.03 | 0.04 | -0.04 | -0.09 | 0.09 | 0.09 | -0.09 | -1 | 1 | 0 | 0.1 | -0.07 | -0.17 | 0.18 | 0.17 | -0.47 | 0.39 | -0.39 | 0.12 | 0.07 | -0.22 | -0.41 | 0.06 | -0.47 |
| tau | 0.03 | -0.14 | 0.05 | 0.04 | 0.04 | -0.04 | 0.07 | -0.07 | 0.18 | -0.18 | 0.29 | -0.29 | 0 | 0 | 1 | -0.81 | -0.42 | -0.25 | 0.12 | 0.14 | -0.35 | 0.09 | -0.09 | 0.03 | -0.13 | 0.08 | -0.29 | 0.29 | -0.08 |
| tau_wait | 0.05 | -0.04 | 0 | -0.01 | -0.05 | 0.05 | -0.07 | 0.07 | -0.12 | 0.12 | -0.14 | 0.14 | -0.1 | 0.1 | -0.81 | 1 | -0.09 | -0.06 | -0.03 | -0.28 | 0.43 | 0.11 | -0.11 | -0.12 | 0.1 | -0.09 | 0.16 | -0.25 | 0.04 |
| wait | -0.1 | 0.32 | -0.13 | -0.06 | -0.09 | 0.09 | -0.02 | 0.02 | -0.1 | 0.1 | -0.23 | 0.23 | 0.07 | -0.07 | -0.42 | -0.09 | 1 | -0.03 | -0.17 | 0.23 | -0.09 | -0.3 | 0.3 | 0.24 | -0.01 | -0.08 | 0.3 | -0.09 | 0.03 |
| ind_trt | -0.06 | 0.05 | 0.02 | -0.01 | 0.19 | -0.19 | 0.01 | -0.01 | -0.06 | 0.06 | -0.14 | 0.14 | 0.17 | -0.17 | -0.25 | -0.06 | -0.03 | 1 | -0.01 | -0.04 | 0.06 | -0.12 | 0.12 | -0.14 | 0.13 | 0.14 | 0 | -0.08 | 0.11 |
| rob_low | -0.36 | -0.21 | 0.29 | 0.19 | 0.33 | -0.33 | 0.28 | -0.28 | -0.27 | 0.27 | -0.17 | 0.17 | -0.18 | 0.18 | 0.12 | -0.03 | -0.17 | -0.01 | 1 | -0.73 | -0.33 | 0.46 | -0.46 | -0.01 | 0.09 | 0.36 | -0.31 | 0.29 | 0.01 |
| rob_mod | 0.37 | 0.17 | -0.26 | -0.2 | -0.38 | 0.38 | -0.22 | 0.22 | 0.26 | -0.26 | 0.26 | -0.26 | -0.17 | 0.17 | 0.14 | -0.28 | 0.23 | -0.04 | -0.73 | 1 | -0.41 | -0.27 | 0.27 | 0.19 | -0.06 | -0.37 | 0.15 | -0.17 | -0.18 |
| rob_high | -0.03 | 0.04 | -0.03 | 0.02 | 0.08 | -0.08 | -0.07 | 0.07 | 0 | 0 | -0.14 | 0.14 | 0.47 | -0.47 | -0.35 | 0.43 | -0.09 | 0.06 | -0.33 | -0.41 | 1 | -0.25 | 0.25 | -0.25 | -0.03 | 0.02 | 0.2 | -0.15 | 0.23 |
| prereg | 0.01 | -0.15 | 0.05 | 0.07 | 0.01 | -0.01 | 0.05 | -0.05 | -0.02 | 0.02 | 0.2 | -0.2 | -0.39 | 0.39 | 0.09 | 0.11 | -0.3 | -0.12 | 0.46 | -0.27 | -0.25 | 1 | -1 | 0.34 | -0.25 | 0.05 | -0.26 | 0.14 | -0.17 |
| conventional | -0.01 | 0.15 | -0.05 | -0.07 | -0.01 | 0.01 | -0.05 | 0.05 | 0.02 | -0.02 | -0.2 | 0.2 | 0.39 | -0.39 | -0.09 | -0.11 | 0.3 | 0.12 | -0.46 | 0.27 | 0.25 | -1 | 1 | -0.34 | 0.25 | -0.05 | 0.26 | -0.14 | 0.17 |
| age | -0.26 | 0.12 | -0.17 | 0.26 | -0.22 | 0.22 | 0.03 | -0.03 | -0.18 | 0.18 | -0.14 | 0.14 | -0.12 | 0.12 | 0.03 | -0.12 | 0.24 | -0.14 | -0.01 | 0.19 | -0.25 | 0.34 | -0.34 | 1 | -0.02 | -0.29 | 0 | -0.01 | -0.24 |
| male | -0.34 | 0.15 | 0.03 | 0.12 | 0.54 | -0.54 | -0.26 | 0.26 | -0.37 | 0.37 | -0.05 | 0.05 | -0.07 | 0.07 | -0.13 | 0.1 | -0.01 | 0.13 | 0.09 | -0.06 | -0.03 | -0.25 | 0.25 | -0.02 | 1 | 0.21 | -0.01 | -0.11 | 0.08 |
| dur | 0 | -0.13 | 0.29 | -0.16 | 0.44 | -0.44 | -0.27 | 0.27 | -0.02 | 0.02 | 0.28 | -0.28 | 0.22 | -0.22 | 0.08 | -0.09 | -0.08 | 0.14 | 0.36 | -0.37 | 0.02 | 0.05 | -0.05 | -0.29 | 0.21 | 1 | -0.05 | 0.21 | 0.77 |
| int | 0.06 | -0.04 | -0.06 | 0.04 | -0.01 | 0.01 | -0.04 | 0.04 | 0.06 | -0.06 | -0.02 | 0.02 | 0.41 | -0.41 | -0.29 | 0.16 | 0.3 | 0 | -0.31 | 0.15 | 0.2 | -0.26 | 0.26 | 0 | -0.01 | -0.05 | 1 | -0.19 | 0.41 |
| FU | -0.05 | -0.12 | 0.18 | -0.02 | 0.03 | -0.03 | 0.18 | -0.18 | -0.01 | 0.01 | -0.06 | 0.06 | -0.06 | 0.06 | 0.29 | -0.25 | -0.09 | -0.08 | 0.29 | -0.17 | -0.15 | 0.14 | -0.14 | -0.01 | -0.11 | 0.21 | -0.19 | 1 | 0.01 |
| sess | 0.13 | -0.11 | 0.16 | -0.16 | 0.34 | -0.34 | -0.28 | 0.28 | 0.03 | -0.03 | 0.21 | -0.21 | 0.47 | -0.47 | -0.08 | 0.04 | 0.03 | 0.11 | 0.01 | -0.18 | 0.23 | -0.17 | 0.17 | -0.24 | 0.08 | 0.77 | 0.41 | 0.01 | 1 |
Excluded factors due to no variation: type of sample (schizophania vs. rest), low risk of bias.
Show the code
cor_mat_dat_cat_alcohol <-
reintegration_dat |>
filter(str_detect(analysis_plan, "Alco") & test_type != "Raw events") |>
select(
treat = CBT_int,
test = test_type,
str = analysis_strategy,
des = QES_design,
ctr = control,
rob = overall_rob,
pre = prereg_chr
)
cat_dummy_dat_alcohol <-
fastDummies::dummy_cols(cor_mat_dat_cat_alcohol) %>%
select(where(is.numeric))
cor_mat_dat_con_alcohol <-
reintegration_dat |>
filter(str_detect(analysis_plan, "Alco") & test_type != "Raw events") |>
select(
age = age_mean,
male = male_pct,
dur = duration_in_weeks,
int = sessions_per_week,
FU = time_after_end_intervention_weeks,
sess = total_number_of_sessions
)
cor_mat_dat_alcohol <-
bind_cols(cat_dummy_dat_alcohol, cor_mat_dat_con_alcohol) |>
select(
cbt_trt = treat_CBT,
oth_trt = treat_Other,
test_clin = `test_Clinician-rated measure`,
test_self = `test_Self-reported`,
itt = str_ITT,
tot = str_TOT,
qes = des_QES,
rct = des_RCT,
tau = ctr_TAU,
tau_wait = `ctr_TAU with Waiting-list`,
rob_mod = `rob_Some concerns/Moderate`,
rob_high = `rob_Serious/High`,
prereg = pre_Preregistered,
conventional = `pre_Not preregistered`,
age:sess
) |>
na.omit()
cor_mat_alcohol <-
cor(
model.matrix(
reformulate(names(cor_mat_dat_alcohol[,1:ncol(cor_mat_dat_alcohol)])),
data = cor_mat_dat_alcohol
)
) |>
as.data.frame() |>
select(-c(`(Intercept)`)) |>
na.omit() |>
mutate(
across(.cols = everything(), ~ round(.x, 2))
)
cor_mat_formatted_alcohol <-
cor_mat_alcohol |>
mutate(
across(.cols = everything(), ~ cell_spec(.x, bold = ifelse(abs(.x) > 0.5, T, F)))
)
kbl(
cor_mat_formatted_alcohol,
escape = F,
col.names = c("Category", colnames(cor_mat_alcohol))
) |>
kable_styling(
bootstrap_options = c("striped", "hover"),
font_size = 10
) |>
scroll_box(width = "100%", height = "100%", fixed_thead = TRUE)| Category | cbt_trt | oth_trt | test_clin | test_self | itt | tot | qes | rct | tau | tau_wait | rob_mod | rob_high | prereg | conventional | age | male | dur | int | FU | sess |
|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
| cbt_trt | 1 | -1 | -0.39 | 0.39 | -0.2 | 0.2 | -0.09 | 0.09 | -0.12 | 0.12 | -0.2 | 0.2 | -0.56 | 0.56 | -0.39 | 0.32 | -0.24 | -0.15 | 0.14 | -0.18 |
| oth_trt | -1 | 1 | 0.39 | -0.39 | 0.2 | -0.2 | 0.09 | -0.09 | 0.12 | -0.12 | 0.2 | -0.2 | 0.56 | -0.56 | 0.39 | -0.32 | 0.24 | 0.15 | -0.14 | 0.18 |
| test_clin | -0.39 | 0.39 | 1 | -1 | 0.45 | -0.45 | -0.31 | 0.31 | 0.58 | -0.58 | 0.45 | -0.45 | 0.69 | -0.69 | 0.6 | -0.79 | -0.23 | -0.54 | 0.34 | -0.36 |
| test_self | 0.39 | -0.39 | -1 | 1 | -0.45 | 0.45 | 0.31 | -0.31 | -0.58 | 0.58 | -0.45 | 0.45 | -0.69 | 0.69 | -0.6 | 0.79 | 0.23 | 0.54 | -0.34 | 0.36 |
| itt | -0.2 | 0.2 | 0.45 | -0.45 | 1 | -1 | 0.1 | -0.1 | 0.05 | -0.05 | 0.14 | -0.14 | 0.65 | -0.65 | 0.54 | -0.66 | 0.44 | 0.18 | 0.15 | 0.28 |
| tot | 0.2 | -0.2 | -0.45 | 0.45 | -1 | 1 | -0.1 | 0.1 | -0.05 | 0.05 | -0.14 | 0.14 | -0.65 | 0.65 | -0.54 | 0.66 | -0.44 | -0.18 | -0.15 | -0.28 |
| qes | -0.09 | 0.09 | -0.31 | 0.31 | 0.1 | -0.1 | 1 | -1 | 0.13 | -0.13 | -0.68 | 0.68 | -0.45 | 0.45 | -0.24 | -0.18 | 0.89 | 0.81 | -0.22 | 0.94 |
| rct | 0.09 | -0.09 | 0.31 | -0.31 | -0.1 | 0.1 | -1 | 1 | -0.13 | 0.13 | 0.68 | -0.68 | 0.45 | -0.45 | 0.24 | 0.18 | -0.89 | -0.81 | 0.22 | -0.94 |
| tau | -0.12 | 0.12 | 0.58 | -0.58 | 0.05 | -0.05 | 0.13 | -0.13 | 1 | -1 | 0.3 | -0.3 | -0.1 | 0.1 | -0.19 | -0.62 | -0.13 | -0.35 | 0.4 | -0.12 |
| tau_wait | 0.12 | -0.12 | -0.58 | 0.58 | -0.05 | 0.05 | -0.13 | 0.13 | -1 | 1 | -0.3 | 0.3 | 0.1 | -0.1 | 0.19 | 0.62 | 0.13 | 0.35 | -0.4 | 0.12 |
| rob_mod | -0.2 | 0.2 | 0.45 | -0.45 | 0.14 | -0.14 | -0.68 | 0.68 | 0.3 | -0.3 | 1 | -1 | 0.43 | -0.43 | 0.3 | -0.01 | -0.57 | -0.5 | 0.32 | -0.61 |
| rob_high | 0.2 | -0.2 | -0.45 | 0.45 | -0.14 | 0.14 | 0.68 | -0.68 | -0.3 | 0.3 | -1 | 1 | -0.43 | 0.43 | -0.3 | 0.01 | 0.57 | 0.5 | -0.32 | 0.61 |
| prereg | -0.56 | 0.56 | 0.69 | -0.69 | 0.65 | -0.65 | -0.45 | 0.45 | -0.1 | 0.1 | 0.43 | -0.43 | 1 | -1 | 0.83 | -0.48 | -0.07 | -0.25 | 0.09 | -0.24 |
| conventional | 0.56 | -0.56 | -0.69 | 0.69 | -0.65 | 0.65 | 0.45 | -0.45 | 0.1 | -0.1 | -0.43 | 0.43 | -1 | 1 | -0.83 | 0.48 | 0.07 | 0.25 | -0.09 | 0.24 |
| age | -0.39 | 0.39 | 0.6 | -0.6 | 0.54 | -0.54 | -0.24 | 0.24 | -0.19 | 0.19 | 0.3 | -0.3 | 0.83 | -0.83 | 1 | -0.31 | 0.09 | 0 | 0 | -0.03 |
| male | 0.32 | -0.32 | -0.79 | 0.79 | -0.66 | 0.66 | -0.18 | 0.18 | -0.62 | 0.62 | -0.01 | 0.01 | -0.48 | 0.48 | -0.31 | 1 | -0.22 | 0.2 | -0.29 | -0.09 |
| dur | -0.24 | 0.24 | -0.23 | 0.23 | 0.44 | -0.44 | 0.89 | -0.89 | -0.13 | 0.13 | -0.57 | 0.57 | -0.07 | 0.07 | 0.09 | -0.22 | 1 | 0.91 | -0.26 | 0.98 |
| int | -0.15 | 0.15 | -0.54 | 0.54 | 0.18 | -0.18 | 0.81 | -0.81 | -0.35 | 0.35 | -0.5 | 0.5 | -0.25 | 0.25 | 0 | 0.2 | 0.91 | 1 | -0.37 | 0.94 |
| FU | 0.14 | -0.14 | 0.34 | -0.34 | 0.15 | -0.15 | -0.22 | 0.22 | 0.4 | -0.4 | 0.32 | -0.32 | 0.09 | -0.09 | 0 | -0.29 | -0.26 | -0.37 | 1 | -0.29 |
| sess | -0.18 | 0.18 | -0.36 | 0.36 | 0.28 | -0.28 | 0.94 | -0.94 | -0.12 | 0.12 | -0.61 | 0.61 | -0.24 | 0.24 | -0.03 | -0.09 | 0.98 | 0.94 | -0.29 | 1 |
Excluded factors due to no variation: type of intervention (CBT vs. rest) and type of test.
Show the code
cor_mat_dat_cat_hope <-
reintegration_dat |>
filter(str_detect(analysis_plan, "Hope") & test_type != "Raw events") |>
select(
samp = schizophrenia,
treat = CBT_int,
test = test_type,
str = analysis_strategy,
des = QES_design,
ctr = control,
rob = overall_rob,
pre = prereg_chr
)
cat_dummy_dat_hope <-
fastDummies::dummy_cols(cor_mat_dat_cat_hope) %>%
select(where(is.numeric))
cor_mat_dat_con_hope <-
reintegration_dat |>
filter(str_detect(analysis_plan, "Hope") & test_type != "Raw events") |>
select(
age = age_mean,
male = male_pct,
dur = duration_in_weeks,
int = sessions_per_week,
FU = time_after_end_intervention_weeks,
sess = total_number_of_sessions
)
cor_mat_dat_hope <-
bind_cols(cat_dummy_dat_hope, cor_mat_dat_con_hope) |>
select(
s_schizo = samp_Schizophrenia,
s_oth = samp_Other,
itt = str_ITT,
tot = str_TOT,
qes = des_QES,
rct = des_RCT,
tau = ctr_TAU,
tau_wait = `ctr_TAU with Waiting-list`,
wait = `ctr_Waiting-list only`,
ind_trt = `ctr_Individual treatment` ,
rob_low = rob_Low,
rob_mod = `rob_Some concerns/Moderate`,
rob_high = `rob_Serious/High`,
prereg = pre_Preregistered,
conventional = `pre_Not preregistered`,
age:sess
) |>
na.omit()
cor_mat_hope <-
cor(
model.matrix(
reformulate(names(cor_mat_dat_hope[,1:ncol(cor_mat_dat_hope)])),
data = cor_mat_dat_hope
)
) |>
as.data.frame() |>
select(-c(`(Intercept)`)) |>
na.omit() |>
mutate(
across(.cols = everything(), ~ round(.x, 2))
)
cor_mat_formatted_hope <-
cor_mat_hope |>
mutate(
across(.cols = everything(), ~ cell_spec(.x, bold = ifelse(abs(.x) > 0.5, T, F)))
)
kbl(
cor_mat_formatted_hope,
escape = F,
col.names = c("Category", colnames(cor_mat_hope))
) |>
kable_styling(
bootstrap_options = c("striped", "hover"),
font_size = 10
) |>
scroll_box(width = "100%", height = "100%", fixed_thead = TRUE)| Category | s_schizo | s_oth | itt | tot | qes | rct | tau | tau_wait | wait | ind_trt | rob_low | rob_mod | rob_high | prereg | conventional | age | male | dur | int | FU | sess |
|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
| s_schizo | 1 | -1 | 0.2 | -0.2 | -0.08 | 0.08 | 0.13 | -0.16 | -0.21 | 0.42 | 0.53 | -0.41 | 0.01 | 0.01 | -0.01 | -0.33 | 0.52 | -0.1 | 0.03 | -0.25 | -0.05 |
| s_oth | -1 | 1 | -0.2 | 0.2 | 0.08 | -0.08 | -0.13 | 0.16 | 0.21 | -0.42 | -0.53 | 0.41 | -0.01 | -0.01 | 0.01 | 0.33 | -0.52 | 0.1 | -0.03 | 0.25 | 0.05 |
| itt | 0.2 | -0.2 | 1 | -1 | 0.23 | -0.23 | 0.56 | -0.29 | -0.37 | -0.14 | 0.56 | -0.25 | -0.21 | -0.02 | 0.02 | -0.3 | 0.07 | 0.43 | -0.1 | -0.06 | 0.15 |
| tot | -0.2 | 0.2 | -1 | 1 | -0.23 | 0.23 | -0.56 | 0.29 | 0.37 | 0.14 | -0.56 | 0.25 | 0.21 | 0.02 | -0.02 | 0.3 | -0.07 | -0.43 | 0.1 | 0.06 | -0.15 |
| qes | -0.08 | 0.08 | 0.23 | -0.23 | 1 | -1 | 0.13 | -0.07 | -0.09 | -0.03 | -0.08 | -0.25 | 0.37 | -0.22 | 0.22 | -0.36 | -0.51 | 0.64 | 0.35 | -0.13 | 0.93 |
| rct | 0.08 | -0.08 | -0.23 | 0.23 | -1 | 1 | -0.13 | 0.07 | 0.09 | 0.03 | 0.08 | 0.25 | -0.37 | 0.22 | -0.22 | 0.36 | 0.51 | -0.64 | -0.35 | 0.13 | -0.93 |
| tau | 0.13 | -0.13 | 0.56 | -0.56 | 0.13 | -0.13 | 1 | -0.52 | -0.66 | -0.25 | 0.31 | 0.03 | -0.33 | 0.34 | -0.34 | -0.24 | 0.23 | 0.05 | -0.56 | 0.09 | -0.17 |
| tau_wait | -0.16 | 0.16 | -0.29 | 0.29 | -0.07 | 0.07 | -0.52 | 1 | -0.18 | -0.07 | -0.16 | -0.52 | 0.79 | 0.31 | -0.31 | 0.02 | -0.28 | -0.06 | 0.75 | -0.02 | 0.23 |
| wait | -0.21 | 0.21 | -0.37 | 0.37 | -0.09 | 0.09 | -0.66 | -0.18 | 1 | -0.09 | -0.21 | 0.35 | -0.23 | -0.58 | 0.58 | 0.27 | -0.21 | 0.01 | 0.04 | -0.03 | 0.02 |
| ind_trt | 0.42 | -0.42 | -0.14 | 0.14 | -0.03 | 0.03 | -0.25 | -0.07 | -0.09 | 1 | -0.08 | 0.13 | -0.09 | -0.22 | 0.22 | 0.02 | 0.37 | -0.03 | 0.01 | -0.13 | -0.01 |
| rob_low | 0.53 | -0.53 | 0.56 | -0.56 | -0.08 | 0.08 | 0.31 | -0.16 | -0.21 | -0.08 | 1 | -0.59 | -0.21 | 0.36 | -0.36 | -0.22 | 0.34 | 0.36 | -0.27 | 0.1 | -0.14 |
| rob_mod | -0.41 | 0.41 | -0.25 | 0.25 | -0.25 | 0.25 | 0.03 | -0.52 | 0.35 | 0.13 | -0.59 | 1 | -0.66 | -0.33 | 0.33 | 0.52 | 0.02 | -0.45 | -0.45 | 0.03 | -0.39 |
| rob_high | 0.01 | -0.01 | -0.21 | 0.21 | 0.37 | -0.37 | -0.33 | 0.79 | -0.23 | -0.09 | -0.21 | -0.66 | 1 | 0.07 | -0.07 | -0.43 | -0.34 | 0.22 | 0.8 | -0.13 | 0.6 |
| prereg | 0.01 | -0.01 | -0.02 | 0.02 | -0.22 | 0.22 | 0.34 | 0.31 | -0.58 | -0.22 | 0.36 | -0.33 | 0.07 | 1 | -1 | 0.3 | 0.04 | -0.24 | -0.13 | 0.32 | -0.31 |
| conventional | -0.01 | 0.01 | 0.02 | -0.02 | 0.22 | -0.22 | -0.34 | -0.31 | 0.58 | 0.22 | -0.36 | 0.33 | -0.07 | -1 | 1 | -0.3 | -0.04 | 0.24 | 0.13 | -0.32 | 0.31 |
| age | -0.33 | 0.33 | -0.3 | 0.3 | -0.36 | 0.36 | -0.24 | 0.02 | 0.27 | 0.02 | -0.22 | 0.52 | -0.43 | 0.3 | -0.3 | 1 | -0.04 | -0.57 | -0.08 | 0.19 | -0.38 |
| male | 0.52 | -0.52 | 0.07 | -0.07 | -0.51 | 0.51 | 0.23 | -0.28 | -0.21 | 0.37 | 0.34 | 0.02 | -0.34 | 0.04 | -0.04 | -0.04 | 1 | -0.19 | -0.49 | -0.02 | -0.57 |
| dur | -0.1 | 0.1 | 0.43 | -0.43 | 0.64 | -0.64 | 0.05 | -0.06 | 0.01 | -0.03 | 0.36 | -0.45 | 0.22 | -0.24 | 0.24 | -0.57 | -0.19 | 1 | 0.04 | 0.04 | 0.61 |
| int | 0.03 | -0.03 | -0.1 | 0.1 | 0.35 | -0.35 | -0.56 | 0.75 | 0.04 | 0.01 | -0.27 | -0.45 | 0.8 | -0.13 | 0.13 | -0.08 | -0.49 | 0.04 | 1 | -0.27 | 0.65 |
| FU | -0.25 | 0.25 | -0.06 | 0.06 | -0.13 | 0.13 | 0.09 | -0.02 | -0.03 | -0.13 | 0.1 | 0.03 | -0.13 | 0.32 | -0.32 | 0.19 | -0.02 | 0.04 | -0.27 | 1 | -0.22 |
| sess | -0.05 | 0.05 | 0.15 | -0.15 | 0.93 | -0.93 | -0.17 | 0.23 | 0.02 | -0.01 | -0.14 | -0.39 | 0.6 | -0.31 | 0.31 | -0.38 | -0.57 | 0.61 | 0.65 | -0.22 | 1 |
Excluded factors due to no appearance: waitlist-only
Show the code
cor_mat_dat_cat_social <-
reintegration_dat |>
filter(str_detect(analysis_plan, "Social") & test_type != "Raw events") |>
select(
samp = schizophrenia,
treat = CBT_int,
test = test_type,
str = analysis_strategy,
des = QES_design,
ctr = control,
rob = overall_rob,
pre = prereg_chr
)
cat_dummy_dat_social <-
fastDummies::dummy_cols(cor_mat_dat_cat_social) %>%
select(where(is.numeric))
cor_mat_dat_con_social <-
reintegration_dat |>
filter(str_detect(analysis_plan, "Social") & test_type != "Raw events") |>
select(
age = age_mean,
male = male_pct,
dur = duration_in_weeks,
int = sessions_per_week,
FU = time_after_end_intervention_weeks,
sess = total_number_of_sessions
)
cor_mat_dat_social <-
bind_cols(cat_dummy_dat_social, cor_mat_dat_con_social) |>
select(
s_schizo = samp_Schizophrenia,
s_oth = samp_Other,
cbt_trt = treat_CBT,
oth_trt = treat_Other,
test_clin = `test_Clinician-rated measure`,
test_self = `test_Self-reported`,
itt = str_ITT,
tot = str_TOT,
qes = des_QES,
rct = des_RCT,
tau = ctr_TAU,
tau_wait = `ctr_TAU with Waiting-list`,
ind_trt = `ctr_Individual treatment` ,
rob_low = rob_Low,
rob_mod = `rob_Some concerns/Moderate`,
rob_high = `rob_Serious/High`,
prereg = pre_Preregistered,
conventional = `pre_Not preregistered`,
everything()
) |>
na.omit()
cor_mat_social <-
cor(
model.matrix(
reformulate(names(cor_mat_dat_social[,1:ncol(cor_mat_dat_social)])),
data = cor_mat_dat_social
)
) |>
as.data.frame() |>
select(-c(`(Intercept)`)) |>
na.omit() |>
mutate(
across(.cols = everything(), ~ round(.x, 2))
)
cor_mat_formatted_social <-
cor_mat_social |>
mutate(
across(.cols = everything(), ~ cell_spec(.x, bold = ifelse(abs(.x) > 0.5, T, F)))
)
kbl(
cor_mat_formatted_social,
escape = F,
col.names = c("Category", colnames(cor_mat_social))
) |>
kable_styling(
bootstrap_options = c("striped", "hover"),
font_size = 10
) |>
scroll_box(width = "100%", height = "100%", fixed_thead = TRUE)Excluded factors due to no appearance: waitlist-only
Show the code
cor_mat_dat_cat_well <-
reintegration_dat |>
filter(str_detect(analysis_plan, "Well") & test_type != "Raw events") |>
select(
samp = schizophrenia,
treat = CBT_int,
test = test_type,
str = analysis_strategy,
des = QES_design,
ctr = control,
rob = overall_rob,
pre = prereg_chr
)
cat_dummy_dat_well <-
fastDummies::dummy_cols(cor_mat_dat_cat_well) %>%
select(where(is.numeric))
cor_mat_dat_con_well <-
reintegration_dat |>
filter(str_detect(analysis_plan, "Well") & test_type != "Raw events") |>
select(
age = age_mean,
male = male_pct,
dur = duration_in_weeks,
int = sessions_per_week,
FU = time_after_end_intervention_weeks,
sess = total_number_of_sessions
)
cor_mat_dat_well <-
bind_cols(cat_dummy_dat_well, cor_mat_dat_con_well) |>
select(
s_schizo = samp_Schizophrenia,
s_oth = samp_Other,
cbt_trt = treat_CBT,
oth_trt = treat_Other,
test_clin = `test_Clinician-rated measure`,
test_self = `test_Self-reported`,
itt = str_ITT,
tot = str_TOT,
qes = des_QES,
rct = des_RCT,
tau = ctr_TAU,
tau_wait = `ctr_TAU with Waiting-list`,
wait = `ctr_Waiting-list only`,
ind_trt = `ctr_Individual treatment` ,
rob_low = rob_Low,
rob_mod = `rob_Some concerns/Moderate`,
rob_high = `rob_Serious/High`,
prereg = pre_Preregistered,
conventional = `pre_Not preregistered`,
everything()
) |>
na.omit()
cor_mat_well <-
cor(
model.matrix(
reformulate(names(cor_mat_dat_well[,1:ncol(cor_mat_dat_well)])),
data = cor_mat_dat_well
)
) |>
as.data.frame() |>
select(-c(`(Intercept)`)) |>
na.omit() |>
mutate(
across(.cols = everything(), ~ round(.x, 2))
)
cor_mat_formatted_well <-
cor_mat_well |>
mutate(
across(.cols = everything(), ~ cell_spec(.x, bold = ifelse(abs(.x) > 0.5, T, F)))
)
kbl(
cor_mat_formatted_well,
escape = F,
col.names = c("Category", colnames(cor_mat_well))
) |>
kable_styling(
bootstrap_options = c("striped", "hover"),
font_size = 10
) |>
scroll_box(width = "100%", height = "100%", fixed_thead = TRUE)| Category | s_schizo | s_oth | cbt_trt | oth_trt | test_clin | test_self | itt | tot | qes | rct | tau | tau_wait | wait | ind_trt | rob_low | rob_mod | rob_high | prereg | conventional | age | male | dur | int | FU | sess |
|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
| s_schizo | 1 | -1 | -0.25 | 0.25 | 0.15 | -0.15 | 0.17 | -0.17 | 0.05 | -0.05 | 0.09 | -0.04 | -0.07 | -0.05 | 0.14 | -0.29 | 0.18 | -0.1 | 0.1 | -0.37 | 0.56 | 0.49 | -0.02 | 0.04 | 0.47 |
| s_oth | -1 | 1 | 0.25 | -0.25 | -0.15 | 0.15 | -0.17 | 0.17 | -0.05 | 0.05 | -0.09 | 0.04 | 0.07 | 0.05 | -0.14 | 0.29 | -0.18 | 0.1 | -0.1 | 0.37 | -0.56 | -0.49 | 0.02 | -0.04 | -0.47 |
| cbt_trt | -0.25 | 0.25 | 1 | -1 | -0.1 | 0.1 | -0.29 | 0.29 | -0.01 | 0.01 | 0.12 | -0.28 | 0.21 | 0.14 | 0.15 | -0.05 | -0.14 | 0.1 | -0.1 | -0.02 | -0.66 | -0.25 | -0.01 | 0.25 | -0.27 |
| oth_trt | 0.25 | -0.25 | -1 | 1 | 0.1 | -0.1 | 0.29 | -0.29 | 0.01 | -0.01 | -0.12 | 0.28 | -0.21 | -0.14 | -0.15 | 0.05 | 0.14 | -0.1 | 0.1 | 0.02 | 0.66 | 0.25 | 0.01 | -0.25 | 0.27 |
| test_clin | 0.15 | -0.15 | -0.1 | 0.1 | 1 | -1 | -0.12 | 0.12 | 0.27 | -0.27 | 0.17 | -0.15 | -0.06 | -0.04 | -0.33 | 0.06 | 0.37 | -0.4 | 0.4 | -0.24 | 0.22 | -0.15 | 0.1 | -0.14 | 0.04 |
| test_self | -0.15 | 0.15 | 0.1 | -0.1 | -1 | 1 | 0.12 | -0.12 | -0.27 | 0.27 | -0.17 | 0.15 | 0.06 | 0.04 | 0.33 | -0.06 | -0.37 | 0.4 | -0.4 | 0.24 | -0.22 | 0.15 | -0.1 | 0.14 | -0.04 |
| itt | 0.17 | -0.17 | -0.29 | 0.29 | -0.12 | 0.12 | 1 | -1 | -0.26 | 0.26 | 0.45 | -0.39 | -0.16 | -0.11 | -0.4 | 0.55 | -0.16 | 0.06 | -0.06 | 0.04 | 0.22 | 0.22 | -0.09 | -0.04 | 0.11 |
| tot | -0.17 | 0.17 | 0.29 | -0.29 | 0.12 | -0.12 | -1 | 1 | 0.26 | -0.26 | -0.45 | 0.39 | 0.16 | 0.11 | 0.4 | -0.55 | 0.16 | -0.06 | 0.06 | -0.04 | -0.22 | -0.22 | 0.09 | 0.04 | -0.11 |
| qes | 0.05 | -0.05 | -0.01 | 0.01 | 0.27 | -0.27 | -0.26 | 0.26 | 1 | -1 | -0.15 | -0.12 | 0.28 | 0.43 | -0.28 | -0.09 | 0.49 | -0.53 | 0.53 | -0.11 | 0.06 | -0.14 | 0.47 | -0.16 | 0.21 |
| rct | -0.05 | 0.05 | 0.01 | -0.01 | -0.27 | 0.27 | 0.26 | -0.26 | -1 | 1 | 0.15 | 0.12 | -0.28 | -0.43 | 0.28 | 0.09 | -0.49 | 0.53 | -0.53 | 0.11 | -0.06 | 0.14 | -0.47 | 0.16 | -0.21 |
| tau | 0.09 | -0.09 | 0.12 | -0.12 | 0.17 | -0.17 | 0.45 | -0.45 | -0.15 | 0.15 | 1 | -0.85 | -0.36 | -0.25 | -0.05 | 0.2 | -0.19 | 0 | 0 | -0.03 | -0.22 | 0.19 | -0.33 | 0.27 | -0.12 |
| tau_wait | -0.04 | 0.04 | -0.28 | 0.28 | -0.15 | 0.15 | -0.39 | 0.39 | -0.12 | 0.12 | -0.85 | 1 | -0.07 | -0.05 | 0.18 | -0.31 | 0.15 | 0.13 | -0.13 | -0.07 | 0.31 | -0.15 | 0.05 | -0.23 | -0.01 |
| wait | -0.07 | 0.07 | 0.21 | -0.21 | -0.06 | 0.06 | -0.16 | 0.16 | 0.28 | -0.28 | -0.36 | -0.07 | 1 | -0.02 | -0.17 | 0.24 | -0.08 | -0.12 | 0.12 | 0.31 | -0.09 | -0.09 | 0.67 | -0.11 | 0.32 |
| ind_trt | -0.05 | 0.05 | 0.14 | -0.14 | -0.04 | 0.04 | -0.11 | 0.11 | 0.43 | -0.43 | -0.25 | -0.05 | -0.02 | 1 | -0.12 | -0.09 | 0.28 | -0.23 | 0.23 | -0.12 | -0.05 | -0.05 | -0.01 | -0.05 | -0.04 |
| rob_low | 0.14 | -0.14 | 0.15 | -0.15 | -0.33 | 0.33 | -0.4 | 0.4 | -0.28 | 0.28 | -0.05 | 0.18 | -0.17 | -0.12 | 1 | -0.71 | -0.43 | 0.53 | -0.53 | -0.17 | -0.16 | 0.42 | -0.3 | 0.34 | 0 |
| rob_mod | -0.29 | 0.29 | -0.05 | 0.05 | 0.06 | -0.06 | 0.55 | -0.55 | -0.09 | 0.09 | 0.2 | -0.31 | 0.24 | -0.09 | -0.71 | 1 | -0.33 | -0.29 | 0.29 | 0.33 | 0.06 | -0.26 | 0.26 | -0.26 | 0.03 |
| rob_high | 0.18 | -0.18 | -0.14 | 0.14 | 0.37 | -0.37 | -0.16 | 0.16 | 0.49 | -0.49 | -0.19 | 0.15 | -0.08 | 0.28 | -0.43 | -0.33 | 1 | -0.34 | 0.34 | -0.2 | 0.13 | -0.22 | 0.08 | -0.12 | -0.04 |
| prereg | -0.1 | 0.1 | 0.1 | -0.1 | -0.4 | 0.4 | 0.06 | -0.06 | -0.53 | 0.53 | 0 | 0.13 | -0.12 | -0.23 | 0.53 | -0.29 | -0.34 | 1 | -1 | 0.37 | -0.41 | 0.06 | -0.34 | 0.21 | -0.25 |
| conventional | 0.1 | -0.1 | -0.1 | 0.1 | 0.4 | -0.4 | -0.06 | 0.06 | 0.53 | -0.53 | 0 | -0.13 | 0.12 | 0.23 | -0.53 | 0.29 | 0.34 | -1 | 1 | -0.37 | 0.41 | -0.06 | 0.34 | -0.21 | 0.25 |
| age | -0.37 | 0.37 | -0.02 | 0.02 | -0.24 | 0.24 | 0.04 | -0.04 | -0.11 | 0.11 | -0.03 | -0.07 | 0.31 | -0.12 | -0.17 | 0.33 | -0.2 | 0.37 | -0.37 | 1 | -0.21 | -0.27 | 0.03 | -0.12 | -0.14 |
| male | 0.56 | -0.56 | -0.66 | 0.66 | 0.22 | -0.22 | 0.22 | -0.22 | 0.06 | -0.06 | -0.22 | 0.31 | -0.09 | -0.05 | -0.16 | 0.06 | 0.13 | -0.41 | 0.41 | -0.21 | 1 | 0.36 | -0.02 | -0.29 | 0.35 |
| dur | 0.49 | -0.49 | -0.25 | 0.25 | -0.15 | 0.15 | 0.22 | -0.22 | -0.14 | 0.14 | 0.19 | -0.15 | -0.09 | -0.05 | 0.42 | -0.26 | -0.22 | 0.06 | -0.06 | -0.27 | 0.36 | 1 | -0.15 | 0.27 | 0.63 |
| int | -0.02 | 0.02 | -0.01 | 0.01 | 0.1 | -0.1 | -0.09 | 0.09 | 0.47 | -0.47 | -0.33 | 0.05 | 0.67 | -0.01 | -0.3 | 0.26 | 0.08 | -0.34 | 0.34 | 0.03 | -0.02 | -0.15 | 1 | -0.18 | 0.56 |
| FU | 0.04 | -0.04 | 0.25 | -0.25 | -0.14 | 0.14 | -0.04 | 0.04 | -0.16 | 0.16 | 0.27 | -0.23 | -0.11 | -0.05 | 0.34 | -0.26 | -0.12 | 0.21 | -0.21 | -0.12 | -0.29 | 0.27 | -0.18 | 1 | 0.04 |
| sess | 0.47 | -0.47 | -0.27 | 0.27 | 0.04 | -0.04 | 0.11 | -0.11 | 0.21 | -0.21 | -0.12 | -0.01 | 0.32 | -0.04 | 0 | 0.03 | -0.04 | -0.25 | 0.25 | -0.14 | 0.35 | 0.63 | 0.56 | 0.04 | 1 |
Show the code
cor_mat_dat_cat_mental <-
mental_health_dat |>
filter(test_type != "Raw events") |>
select(
plan = analysis_plan,
samp = schizophrenia,
treat = CBT_int,
test = test_type,
str = analysis_strategy,
des = QES_design,
ctr = control,
rob = overall_rob,
pre = prereg_chr
)
cat_dummy_dat_mental <-
fastDummies::dummy_cols(cor_mat_dat_cat_mental) %>%
select(where(is.numeric))
cor_mat_dat_con_mental <-
mental_health_dat |>
filter(test_type != "Raw events") |>
select(
age = age_mean,
male = male_pct,
dur = duration_in_weeks,
int = sessions_per_week,
FU = time_after_end_intervention_weeks,
sess = total_number_of_sessions
)
cor_mat_dat_mental <-
bind_cols(cat_dummy_dat_mental, cor_mat_dat_con_mental) |>
select(
anxiety = plan_Anxiety,
depress = plan_Depression,
g_mental = `plan_General mental health`,
symptoms = `plan_Symptoms of psychosis`,
s_schizo = samp_Schizophrenia,
s_oth = samp_Other,
cbt_trt = treat_CBT,
oth_trt = treat_Other,
test_clin = `test_Clinician-rated measure`,
test_self = `test_Self-reported`,
itt = str_ITT,
tot = str_TOT,
qes = des_QES,
rct = des_RCT,
tau = ctr_TAU,
tau_wait = `ctr_TAU with Waiting-list`,
wait = `ctr_Waiting-list only`,
ind_trt = `ctr_Individual treatment` ,
rob_low = rob_Low,
rob_mod = `rob_Some concerns/Moderate`,
rob_high = `rob_Serious/High`,
prereg = pre_Preregistered,
conventional = `pre_Not preregistered`,
everything()
) |>
na.omit()
cor_mat_mental <-
cor(
model.matrix(
reformulate(names(cor_mat_dat_mental[,1:ncol(cor_mat_dat_mental)])),
data = cor_mat_dat_mental
)
) %>%
as.data.frame() %>%
select(-c(`(Intercept)`)) %>%
na.omit() |>
mutate(
across(.cols = everything(), ~ round(.x, 2))
)
cor_mat_formatted_mental <-
cor_mat_mental |>
mutate(
across(.cols = everything(), ~ cell_spec(.x, bold = ifelse(abs(.x) > 0.5, T, F)))
)
kbl(
cor_mat_formatted_mental,
escape = F,
col.names = c("Category", colnames(cor_mat_mental))
) |>
kable_styling(
bootstrap_options = c("striped", "hover"),
font_size = 10
) |>
scroll_box(width = "100%", height = "100%", fixed_thead = TRUE)| Category | anxiety | depress | g_mental | symptoms | s_schizo | s_oth | cbt_trt | oth_trt | test_clin | test_self | itt | tot | qes | rct | tau | tau_wait | wait | ind_trt | rob_low | rob_mod | rob_high | prereg | conventional | age | male | dur | int | FU | sess |
|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
| anxiety | 1 | -0.2 | -0.33 | -0.14 | -0.1 | 0.1 | 0.31 | -0.31 | -0.11 | 0.11 | -0.13 | 0.13 | -0.05 | 0.05 | -0.14 | -0.03 | 0.25 | 0.12 | 0.08 | -0.08 | 0.01 | 0.1 | -0.1 | 0.22 | -0.04 | -0.06 | -0.07 | -0.02 | -0.13 |
| depress | -0.2 | 1 | -0.59 | -0.25 | -0.13 | 0.13 | 0.04 | -0.04 | -0.13 | 0.13 | -0.02 | 0.02 | -0.02 | 0.02 | 0.08 | -0.15 | 0.09 | 0.02 | -0.15 | 0.18 | -0.06 | -0.04 | 0.04 | 0.13 | -0.1 | -0.11 | 0 | 0.01 | -0.1 |
| g_mental | -0.33 | -0.59 | 1 | -0.41 | -0.07 | 0.07 | -0.06 | 0.06 | -0.1 | 0.1 | 0.18 | -0.18 | -0.15 | 0.15 | -0.16 | 0.28 | -0.16 | -0.05 | 0.09 | -0.04 | -0.05 | 0.17 | -0.17 | -0.27 | -0.1 | 0.01 | -0.01 | -0.02 | 0 |
| symptoms | -0.14 | -0.25 | -0.41 | 1 | 0.35 | -0.35 | -0.22 | 0.22 | 0.39 | -0.39 | -0.12 | 0.12 | 0.27 | -0.27 | 0.24 | -0.19 | -0.09 | -0.06 | -0.01 | -0.1 | 0.13 | -0.28 | 0.28 | 0.03 | 0.3 | 0.17 | 0.08 | 0.03 | 0.22 |
| s_schizo | -0.1 | -0.13 | -0.07 | 0.35 | 1 | -1 | -0.08 | 0.08 | -0.04 | 0.04 | 0.04 | -0.04 | 0.03 | -0.03 | -0.05 | 0.05 | -0.07 | 0.12 | 0.27 | -0.35 | 0.14 | 0.03 | -0.03 | -0.17 | 0.41 | 0.37 | -0.07 | -0.01 | 0.24 |
| s_oth | 0.1 | 0.13 | 0.07 | -0.35 | -1 | 1 | 0.08 | -0.08 | 0.04 | -0.04 | -0.04 | 0.04 | -0.03 | 0.03 | 0.05 | -0.05 | 0.07 | -0.12 | -0.27 | 0.35 | -0.14 | -0.03 | 0.03 | 0.17 | -0.41 | -0.37 | 0.07 | 0.01 | -0.24 |
| cbt_trt | 0.31 | 0.04 | -0.06 | -0.22 | -0.08 | 0.08 | 1 | -1 | 0 | 0 | -0.04 | 0.04 | -0.09 | 0.09 | -0.17 | -0.02 | 0.31 | 0.1 | 0.07 | -0.06 | 0 | 0.09 | -0.09 | 0.16 | -0.03 | -0.33 | 0.14 | 0.11 | -0.25 |
| oth_trt | -0.31 | -0.04 | 0.06 | 0.22 | 0.08 | -0.08 | -1 | 1 | 0 | 0 | 0.04 | -0.04 | 0.09 | -0.09 | 0.17 | 0.02 | -0.31 | -0.1 | -0.07 | 0.06 | 0 | -0.09 | 0.09 | -0.16 | 0.03 | 0.33 | -0.14 | -0.11 | 0.25 |
| test_clin | -0.11 | -0.13 | -0.1 | 0.39 | -0.04 | 0.04 | 0 | 0 | 1 | -1 | 0.04 | -0.04 | 0.05 | -0.05 | 0.26 | -0.29 | 0.07 | -0.09 | -0.26 | 0.23 | -0.01 | -0.23 | 0.23 | 0.15 | 0.06 | -0.06 | 0.04 | 0 | 0.04 |
| test_self | 0.11 | 0.13 | 0.1 | -0.39 | 0.04 | -0.04 | 0 | 0 | -1 | 1 | -0.04 | 0.04 | -0.05 | 0.05 | -0.26 | 0.29 | -0.07 | 0.09 | 0.26 | -0.23 | 0.01 | 0.23 | -0.23 | -0.15 | -0.06 | 0.06 | -0.04 | 0 | -0.04 |
| itt | -0.13 | -0.02 | 0.18 | -0.12 | 0.04 | -0.04 | -0.04 | 0.04 | 0.04 | -0.04 | 1 | -1 | -0.18 | 0.18 | 0.35 | -0.22 | -0.22 | -0.14 | -0.19 | 0.27 | -0.14 | 0.29 | -0.29 | -0.31 | -0.25 | 0.17 | -0.13 | 0.04 | 0.04 |
| tot | 0.13 | 0.02 | -0.18 | 0.12 | -0.04 | 0.04 | 0.04 | -0.04 | -0.04 | 0.04 | -1 | 1 | 0.18 | -0.18 | -0.35 | 0.22 | 0.22 | 0.14 | 0.19 | -0.27 | 0.14 | -0.29 | 0.29 | 0.31 | 0.25 | -0.17 | 0.13 | -0.04 | -0.04 |
| qes | -0.05 | -0.02 | -0.15 | 0.27 | 0.03 | -0.03 | -0.09 | 0.09 | 0.05 | -0.05 | -0.18 | 0.18 | 1 | -1 | 0.01 | -0.17 | 0.12 | 0.25 | -0.21 | -0.32 | 0.62 | -0.42 | 0.42 | -0.07 | 0.01 | 0.15 | 0.39 | -0.12 | 0.43 |
| rct | 0.05 | 0.02 | 0.15 | -0.27 | -0.03 | 0.03 | 0.09 | -0.09 | -0.05 | 0.05 | 0.18 | -0.18 | -1 | 1 | -0.01 | 0.17 | -0.12 | -0.25 | 0.21 | 0.32 | -0.62 | 0.42 | -0.42 | 0.07 | -0.01 | -0.15 | -0.39 | 0.12 | -0.43 |
| tau | -0.14 | 0.08 | -0.16 | 0.24 | -0.05 | 0.05 | -0.17 | 0.17 | 0.26 | -0.26 | 0.35 | -0.35 | 0.01 | -0.01 | 1 | -0.81 | -0.4 | -0.26 | -0.13 | 0.34 | -0.28 | -0.03 | 0.03 | -0.06 | -0.11 | 0.1 | -0.19 | 0.25 | -0.01 |
| tau_wait | -0.03 | -0.15 | 0.28 | -0.19 | 0.05 | -0.05 | -0.02 | 0.02 | -0.29 | 0.29 | -0.22 | 0.22 | -0.17 | 0.17 | -0.81 | 1 | -0.11 | -0.07 | 0.21 | -0.44 | 0.32 | 0.1 | -0.1 | -0.19 | 0.11 | -0.14 | -0.03 | -0.18 | -0.1 |
| wait | 0.25 | 0.09 | -0.16 | -0.09 | -0.07 | 0.07 | 0.31 | -0.31 | 0.07 | -0.07 | -0.22 | 0.22 | 0.12 | -0.12 | -0.4 | -0.11 | 1 | -0.03 | -0.13 | 0.21 | -0.12 | -0.07 | 0.07 | 0.55 | -0.01 | -0.1 | 0.46 | -0.14 | 0.12 |
| ind_trt | 0.12 | 0.02 | -0.05 | -0.06 | 0.12 | -0.12 | 0.1 | -0.1 | -0.09 | 0.09 | -0.14 | 0.14 | 0.25 | -0.25 | -0.26 | -0.07 | -0.03 | 1 | 0.03 | -0.16 | 0.17 | -0.07 | 0.07 | -0.14 | 0.05 | 0.2 | -0.03 | -0.06 | 0.13 |
| rob_low | 0.08 | -0.15 | 0.09 | -0.01 | 0.27 | -0.27 | 0.07 | -0.07 | -0.26 | 0.26 | -0.19 | 0.19 | -0.21 | 0.21 | -0.13 | 0.21 | -0.13 | 0.03 | 1 | -0.63 | -0.29 | 0.5 | -0.5 | 0.02 | 0.07 | 0.3 | -0.24 | 0.19 | -0.01 |
| rob_mod | -0.08 | 0.18 | -0.04 | -0.1 | -0.35 | 0.35 | -0.06 | 0.06 | 0.23 | -0.23 | 0.27 | -0.27 | -0.32 | 0.32 | 0.34 | -0.44 | 0.21 | -0.16 | -0.63 | 1 | -0.56 | -0.19 | 0.19 | 0.13 | -0.09 | -0.29 | 0.16 | -0.03 | -0.14 |
| rob_high | 0.01 | -0.06 | -0.05 | 0.13 | 0.14 | -0.14 | 0 | 0 | -0.01 | 0.01 | -0.14 | 0.14 | 0.62 | -0.62 | -0.28 | 0.32 | -0.12 | 0.17 | -0.29 | -0.56 | 1 | -0.3 | 0.3 | -0.19 | 0.03 | 0.04 | 0.05 | -0.16 | 0.18 |
| prereg | 0.1 | -0.04 | 0.17 | -0.28 | 0.03 | -0.03 | 0.09 | -0.09 | -0.23 | 0.23 | 0.29 | -0.29 | -0.42 | 0.42 | -0.03 | 0.1 | -0.07 | -0.07 | 0.5 | -0.19 | -0.3 | 1 | -1 | 0.2 | -0.25 | 0.03 | -0.25 | 0.11 | -0.22 |
| conventional | -0.1 | 0.04 | -0.17 | 0.28 | -0.03 | 0.03 | -0.09 | 0.09 | 0.23 | -0.23 | -0.29 | 0.29 | 0.42 | -0.42 | 0.03 | -0.1 | 0.07 | 0.07 | -0.5 | 0.19 | 0.3 | -1 | 1 | -0.2 | 0.25 | -0.03 | 0.25 | -0.11 | 0.22 |
| age | 0.22 | 0.13 | -0.27 | 0.03 | -0.17 | 0.17 | 0.16 | -0.16 | 0.15 | -0.15 | -0.31 | 0.31 | -0.07 | 0.07 | -0.06 | -0.19 | 0.55 | -0.14 | 0.02 | 0.13 | -0.19 | 0.2 | -0.2 | 1 | 0.04 | -0.21 | 0.1 | -0.08 | -0.1 |
| male | -0.04 | -0.1 | -0.1 | 0.3 | 0.41 | -0.41 | -0.03 | 0.03 | 0.06 | -0.06 | -0.25 | 0.25 | 0.01 | -0.01 | -0.11 | 0.11 | -0.01 | 0.05 | 0.07 | -0.09 | 0.03 | -0.25 | 0.25 | 0.04 | 1 | 0.07 | -0.01 | -0.16 | -0.02 |
| dur | -0.06 | -0.11 | 0.01 | 0.17 | 0.37 | -0.37 | -0.33 | 0.33 | -0.06 | 0.06 | 0.17 | -0.17 | 0.15 | -0.15 | 0.1 | -0.14 | -0.1 | 0.2 | 0.3 | -0.29 | 0.04 | 0.03 | -0.03 | -0.21 | 0.07 | 1 | -0.15 | 0.19 | 0.72 |
| int | -0.07 | 0 | -0.01 | 0.08 | -0.07 | 0.07 | 0.14 | -0.14 | 0.04 | -0.04 | -0.13 | 0.13 | 0.39 | -0.39 | -0.19 | -0.03 | 0.46 | -0.03 | -0.24 | 0.16 | 0.05 | -0.25 | 0.25 | 0.1 | -0.01 | -0.15 | 1 | -0.17 | 0.43 |
| FU | -0.02 | 0.01 | -0.02 | 0.03 | -0.01 | 0.01 | 0.11 | -0.11 | 0 | 0 | 0.04 | -0.04 | -0.12 | 0.12 | 0.25 | -0.18 | -0.14 | -0.06 | 0.19 | -0.03 | -0.16 | 0.11 | -0.11 | -0.08 | -0.16 | 0.19 | -0.17 | 1 | -0.02 |
| sess | -0.13 | -0.1 | 0 | 0.22 | 0.24 | -0.24 | -0.25 | 0.25 | 0.04 | -0.04 | 0.04 | -0.04 | 0.43 | -0.43 | -0.01 | -0.1 | 0.12 | 0.13 | -0.01 | -0.14 | 0.18 | -0.22 | 0.22 | -0.1 | -0.02 | 0.72 | 0.43 | -0.02 | 1 |
Standard Errors and Other Auxiliary Data
SE forest plot
This forest plot shows the within- and between study variation of standard error of effect size estimates for reintegrational outcomes.
Show the code
reintegration_dat |>
arrange(desc(study)) |>
mutate(
study = factor(study, unique(study)),
segt_pop = sqrt(vgt_pop)
) |>
ggplot(aes(x = segt_pop, y = study, color = study)) +
geom_point(aes(size = N_total), alpha = 0.5) +
scale_y_discrete() +
theme_minimal() +
labs(y = "", x = "SE") +
theme(legend.position = "none", axis.text.y = element_text(size = 10))Show the code
mental_health_dat |>
arrange(desc(study)) |>
mutate(
study = factor(study, unique(study)),
segt_pop = sqrt(vgt_pop)
) |>
ggplot(aes(x = segt_pop, y = study, color = study)) +
geom_point(aes(size = N_total), alpha = 0.5) +
scale_y_discrete() +
theme_minimal() +
labs(y = "", x = "SE") +
theme(legend.position = "none", axis.text.y = element_text(size = 10))Modified SE forest plot
Show the code
reintegration_dat |>
arrange(desc(study)) |>
mutate(
study = factor(study, unique(study)),
Wse_pop = sqrt(Wgt_pop)
) |>
ggplot(aes(x = Wse_pop, y = study, color = study)) +
geom_point(aes(size = N_total), alpha = 0.5, position = position_jitter(height = 0.4)) +
scale_y_discrete() +
theme_minimal() +
labs(y = "", x = "Modified SE") +
theme(legend.position = "none", axis.text.y = element_text(size = 10))Show the code
mental_health_dat |>
arrange(desc(study)) |>
mutate(
study = factor(study, unique(study)),
Wse_pop = sqrt(Wgt_pop)
) |>
ggplot(aes(x = Wse_pop, y = study, color = study)) +
geom_point(aes(size = N_total), alpha = 0.5, position = position_jitter(height = 0.4)) +
scale_y_discrete() +
theme_minimal() +
labs(y = "", x = "Modified SE") +
theme(legend.position = "none", axis.text.y = element_text(size = 10))Inverse sampling covariance weights plot
Show the code
iscw <-
function(k, rho, v) {
iscw_weights <- k / (((k - 1) * rho + 1) * v)
return(iscw_weights)
}
rho_val <- round(seq(0, 0.8, 0.2), 1)
ISCW_plot <-
reintegration_dat |>
expand_grid(rho = rho_val) |>
group_by(study, rho) |>
summarise(
k = n(),
v_bar = mean(vgt_pop)
) |>
ungroup() |>
mutate(iscw_w = iscw(k, rho, v_bar),
depd = ifelse(k > 1, 1, 0)) |>
group_by(rho) |>
mutate(iscw_w_norm = iscw_w / sum(iscw_w)) |>
ungroup() |>
distinct(study, rho, iscw_w_norm, depd) |>
mutate(study = factor(study, levels = study[rho == 0.8][order(iscw_w_norm[rho == 0.8])])) |>
ggplot(aes(y = iscw_w_norm, x = study, group = factor(rho), colour = factor(rho))) +
geom_point() +
geom_line() +
theme_minimal() +
coord_flip() +
theme(
legend.position = "inside",
legend.position.inside = c(0.8, 0.2)
) +
labs(x = "", y = "Normalized Weight", colour = "Assumed Correlation")
ISCW_plotShow the code
ISCW_plot_mental <-
mental_health_dat |>
expand_grid(rho = rho_val) |>
group_by(study, rho) |>
summarise(
k = n(),
v_bar = mean(vgt_pop)
) |>
ungroup() |>
mutate(iscw_w = iscw(k, rho, v_bar),
depd = ifelse(k > 1, 1, 0)) |>
group_by(rho) |>
mutate(iscw_w_norm = iscw_w / sum(iscw_w)) |>
ungroup() |>
distinct(study, rho, iscw_w_norm, depd) |>
mutate(study = factor(study, levels = study[rho == 0.8][order(iscw_w_norm[rho == 0.8])])) |>
ggplot(aes(y = iscw_w_norm, x = study, group = factor(rho), colour = factor(rho))) +
geom_point() +
geom_line() +
theme_minimal() +
coord_flip() +
theme(
legend.position = "inside",
legend.position.inside = c(0.85, 0.2)
) +
labs(x = "", y = "Normalized Weight", colour = "Assumed Correlation")
ISCW_plot_mentalStudy sample sizes versus standard error estimates
Show the code
reintegration_dat |>
mutate(segt_pop = sqrt(vgt_pop)) |>
ggplot(aes(N_total, segt_pop)) +
geom_point() +
geom_smooth() +
theme_bw() +
labs(x = "Total sample size", y = "Modified standard error")Show the code
mental_health_dat |>
mutate(segt_pop = sqrt(vgt_pop)) |>
ggplot(aes(N_total, segt_pop)) +
geom_point() +
geom_smooth() +
theme_bw() +
labs(x = "Total sample size", y = "Modified standard error")Standard error vs. scaled standrad error
Show the code
reintegration_dat |>
mutate(
sample_above_100 = if_else(N_total >100, "Sample > 100", "Sample < 100"),
sample_above_100 = factor(sample_above_100, levels = c( "Sample > 100", "Sample < 100")),
segt_pop = sqrt(vgt_pop),
diff_se = sqrt(Wgt_pop) - sqrt(vgt_pop)
) |>
ggplot(aes(gt_pop, diff_se, color = sample_above_100)) +
geom_point() +
geom_hline(yintercept = 0, linetype = "dashed") +
theme_bw() +
theme(
plot.caption=element_text(hjust = 0, size = 10),
legend.position= "bottom",
legend.title = element_blank(),
panel.spacing.x = unit(5, "mm"),
panel.spacing.y = unit(5, "mm"),
#panel.grid.major = element_blank(),
#panel.grid.minor = element_blank()
) +
scale_x_continuous(expand=c(0,0), breaks = seq(-1L, 1.5, 0.2)) +
scale_y_continuous(expand=c(0,0), breaks = seq(-0.1, 0.1, 0.01)) +
expand_limits(x = c(-0.6, 1.5), y = c(-0.041, 0.01)) +
labs(y = "Modified SE - SE (used in main analysis)", x = "Effect size estimate")Show the code
mental_health_dat |>
mutate(
sample_above_100 = if_else(N_total >100, "Sample > 100", "Sample < 100"),
sample_above_100 = factor(sample_above_100, levels = c( "Sample > 100", "Sample < 100")),
segt_pop = sqrt(vgt_pop),
diff_se = sqrt(Wgt_pop) - sqrt(vgt_pop)
) |>
ggplot(aes(gt_pop, diff_se, color = sample_above_100)) +
geom_point() +
geom_hline(yintercept = 0, linetype = "dashed") +
theme_bw() +
theme(
plot.caption=element_text(hjust = 0, size = 10),
legend.position= "bottom",
legend.title = element_blank(),
panel.spacing.x = unit(5, "mm"),
panel.spacing.y = unit(5, "mm"),
#panel.grid.major = element_blank(),
#panel.grid.minor = element_blank()
) +
scale_x_continuous(expand=c(0,0), breaks = seq(-1L, 2, 0.2)) +
scale_y_continuous(expand=c(0,0), breaks = seq(-0.1, 0.1, 0.01)) +
expand_limits(x = c(-0.71, 2), y = c(-0.091, 0.01)) +
labs(y = "Modified SE - SE (used in main analysis)", x = "Effect size estimate")Effect size estimates distributions and outliers
Marginal distributions
Show the code
reintegration_dat$gt_pop |>
skim() |>
select(-skim_type, -skim_variable, -n_missing, -complete_rate, -numeric.hist) |>
rename_at(vars(starts_with("numeric.")), ~ str_remove(., "numeric\\.")) |>
knitr::kable(
digits = 2,
caption = "Marginal distribution of effect size estimates",
booktabs = TRUE
) |>
kable_styling(bootstrap_options = c("striped","condensed"), full_width = FALSE)| mean | sd | p0 | p25 | p50 | p75 | p100 |
|---|---|---|---|---|---|---|
| 0.21 | 0.28 | -0.5 | 0.04 | 0.18 | 0.39 | 1.35 |
Show the code
mental_health_dat$gt_pop |>
skim() |>
select(-skim_type, -skim_variable, -n_missing, -complete_rate, -numeric.hist) |>
rename_at(vars(starts_with("numeric.")), ~ str_remove(., "numeric\\.")) |>
knitr::kable(
digits = 2,
caption = "Marginal distribution of effect size estimates",
booktabs = TRUE
) |>
kable_styling(bootstrap_options = c("striped","condensed"), full_width = FALSE)| mean | sd | p0 | p25 | p50 | p75 | p100 |
|---|---|---|---|---|---|---|
| 0.3 | 0.42 | -0.64 | 0.03 | 0.22 | 0.55 | 2.1 |
Marginal distribution plots
Show the code
qrtls <- quantile(reintegration_dat$gt_pop, c(.25, .75), na.rm = TRUE)
fences <- qrtls + 3 * diff(qrtls) * c(-1, 1)
fence_dat <- data.frame(qrtl = qrtls, fence = fences)
es_dist_plot <-
ggplot(reintegration_dat, aes(gt_pop)) +
geom_density(fill = "cornflowerblue", alpha = 0.8) +
geom_vline(data = fence_dat, aes(xintercept = qrtl), linetype = "solid") +
geom_vline(data = fence_dat, aes(xintercept = fence), linetype = "dashed") +
geom_rug(alpha = 0.25) +
theme_minimal() +
theme(axis.title.y = element_blank()) +
labs(x = "Effect size estimate")
es_dist_plotShow the code
qrtls_mental <- quantile(mental_health_dat$gt_pop, c(.25, .75), na.rm = TRUE)
fences_mental <- qrtls_mental + 3 * diff(qrtls_mental) * c(-1, 1)
fence_dat_mental <- data.frame(qrtl = qrtls_mental, fence = fences_mental)
es_dist_plot_mental <-
ggplot(mental_health_dat, aes(gt_pop)) +
geom_density(fill = "gray", alpha = 0.8) +
geom_vline(data = fence_dat_mental, aes(xintercept = qrtl), linetype = "solid") +
geom_vline(data = fence_dat_mental, aes(xintercept = fence), linetype = "dashed") +
geom_rug(alpha = 0.25) +
theme_minimal() +
theme(axis.title.y = element_blank()) +
labs(x = "Effect size estimate")
es_dist_plot_mentalEffect size distribution across type of outcomes
Show the code
outcomes_reint_dat <-
reintegration_dat |>
filter(!str_detect(analysis_plan, "Psychiatric")) |>
group_by(analysis_plan) |>
reframe(
qrtl = quantile(gt, c(.25, .75)),
fence = qrtl + 3 * diff(qrtl) * c(-1,1),
.groups = "drop"
)
reintegration_outcome_plot <-
reintegration_dat |>
#Has only one data point
filter(!str_detect(analysis_plan, "Psychiatric")) |>
ggplot(aes(x = gt_pop, fill = analysis_plan)) +
geom_density(alpha = 0.7) +
geom_vline(data = outcomes_reint_dat, aes(xintercept = qrtl), linetype = "solid")+
geom_vline(data = outcomes_reint_dat, aes(xintercept = fence), linetype = "dashed")+
geom_rug(alpha = 0.25) +
facet_wrap(~analysis_plan, ncol = 2) +
theme_minimal() +
theme(legend.position = "none", axis.title.y = element_blank(), axis.text.y = element_blank()) +
labs(x = "Effect size estimate", ); reintegration_outcome_plotShow the code
outcome_mental_health_dat <-
mental_health_dat |>
group_by(analysis_plan) |>
reframe(
qrtl = quantile(gt, c(.25, .75)),
fence = qrtl + 3 * diff(qrtl) * c(-1,1),
.groups = "drop"
)
mental_health_outcomes_plot <-
mental_health_dat |>
ggplot(aes(x = gt_pop, fill = analysis_plan)) +
geom_density(alpha = 0.7) +
geom_vline(data = outcome_mental_health_dat, aes(xintercept = qrtl), linetype = "solid")+
geom_vline(data = outcome_mental_health_dat, aes(xintercept = fence), linetype = "dashed")+
geom_rug(alpha = 0.25) +
facet_wrap(~analysis_plan, scales = "free") +
theme_minimal() +
theme(legend.position = "none", axis.title.y = element_blank(), axis.text = element_blank()) +
labs(x = "Effect size estimate"); mental_health_outcomes_plot